What is it
Active Record包装了数据表或视图中的一行数据,封装了它的数据库访问行为,并加入了该数据的业务逻辑。也可以这样看,Active Record是加入了数据库访问行为的Domain Object ^_^
How it works
Active Record即可以包含数据记录的所有业务逻辑,也可以只包含普通的面向数据的逻辑,将其余的业务逻辑通过Transaction Script来实现
Active Record常常实现下面的方法:
1。通过Sql查询结果构造一个Active Record实例
2。为插入数据库操作预先生成一个Active Record实例
3。静态的Finder方法,返回Active Record对象
4。通过Active Record对象Update数据库和Insert数据库
5。Get/Set数据域
6。实现一些业务逻辑
由于Active Record和数据库的紧密耦合,我们经常在此模式中看到静态的Finder方法,当然也可以把这些Finder方法放到一个类中。
When to use it
Active Record的一个优点是比较简单,在基于单条数据记录的CRUD操作中都能很好的工作
在Domain Model中主要的选择就是Active Record和Data Mapping,前者比较简单,而且比较适合解决对象模型恰好对应数据库中的表结构的业务领域。但是问题是如果义务逻辑比较复杂,你希望你的对象模型能够处理关系,集合,继承等等时,Active Record就力不从心了,这是就是使用Data Mapper的时候了
Active Record的另一个问题是它把对象模型的设计紧密地和数据库结构耦合在一起,修改和重构都很困难
如果你使用Transaction Script,那么Active Object也是一个很好的模式,它帮你减少代码重复等不好的现象。