ActiveRecord 不要把它当DTO 为什么

愤怒的大菠萝 发布于 2012/12/11 09:37
阅读 382
收藏 2

@JFinal 你好,想跟你请教个问题:

我是初学jfinal,这些天都在研究这个框架,感觉非常不错,这里有个疑问希望你能帮忙.下面是我在网上查看资料找到的

JFinal采用ActiveRecord实现数据库操作支持
ActiveRecord不适合于:

1. ActiveRecord虽然有业务逻辑, 但基本上都是基于单表的. 跨表逻辑一般会放到当发生跨表的操作时, 往往会配合使用事务脚本(Transaction Script)中. 如果对象间的关联越来越多, 你的事务脚本越来越庞大, 重复的代码越来越多, 你就要考虑Domain Model + O/R Mapper了;
2. ActiveRecord保存了数据, 使它有时候看上去像数据传输对象(DTO). 但是ActiveRecord有数据库访问能力, 不要把它当DTO用. 尤其在跨越进程边界调用的时候, 不能传递ActiveRecord对象。

这里说的 不要把它当DTO用. 尤其在跨越进程边界调用的时候, 不能传递ActiveRecord对象。

1.这里的blog是不是ActiveRecord 对象?

2.如果是的话那是不是不能把Blog 对象当做DTO
3.还有我看到网上对DTO的解释是"数据传输对象" ,能用通俗的语言来解释下,最好是能在jfinal_demo体现下.

加载中
1
缪斯的情人
缪斯的情人

1.ORM方式是通过对象间的关联来建立关联查询关系,而ActiveRecord中弱化了传统Model的概念,通过查询语句关联查询如:select a.*,b.b_id from a,b where a.id=b.a_id,这时候我们可以将查询结果赋值给对象a,对象a中存储的是一个map形式,可以通过a.getStr('b_id')获取到关联表b中数据

2.不知道你所指的DTO是什么,以我的理解DTO模式是一种协议,类似于PO,VO的域模型,主要用于远程调用的一个协议,比如说:我传输一个对象给客户端,客户端不需要全部获取我的javaBean对象,这时候可以定义一个DTO,只传输部分字段,这个节省了流量开支,还保证了客户端无法预知服务端数据结构。

以上个人理解,待补充吧

0
愤怒的大菠萝
愤怒的大菠萝
附上代码,下面的Blog是"ActiveRecord"吗,可以作为DTO传递吗?
* 配置插件
     */
    public void configPlugin(Plugins me) {
        // 配置C3p0数据库连接池插件
        C3p0Plugin c3p0Plugin = new C3p0Plugin(getProperty("jdbcUrl"), getProperty("user"), getProperty("password").trim());
        me.add(c3p0Plugin);

        // 配置ActiveRecord插件
        ActiveRecordPlugin arp = new ActiveRecordPlugin(c3p0Plugin);
        me.add(arp);
        arp.addMapping("blog", Blog.class);    // 映射blog 表到 Blog模型
    }
public class Blog extends Model<Blog> {
    public static final Blog dao = new Blog();
}

缪斯的情人
缪斯的情人
Blog只是个model,AR是一个数据源访问层,原则上说只要可序列化就可以作为DTO传递
0
愤怒的大菠萝
愤怒的大菠萝
虽然不明白,但是还是非常感谢
0
RickHuang
RickHuang
dto是纯数据对象,不包含任何访问数据的逻辑。就类似你老板要你发个统计客户数量的email给他,你不会在email里也带上查询sql的语录吧
返回顶部
顶部