首先我们需要知道活动记录的优势是什么?首先我的理解就是活动记录模式容器理解,简单,并且目前有很多的框架支持这样的模式。首先就像Linq、Castle框架都是采用这样的模式。。一般情况下,活动记录模式在关系型模型中可以很好的支持。如果在应用程序中不使用关系型模型来设计业务层的话,那么需要我们人工来组织,协调活动记录与数据模型之间,其实这个就可以简单的理解为数据映射,一般的ORM框架中都提供这样的功能。
我们需要知道,如果活动记录模式下的对象发生改变了,那么数据库也得跟着修改,或者数据库表发生改变了,那么你不得不修改对应的活动记录对象及相关代码。
总而言之,如果我们在使用活动记录模式的过程中如果不能保证对象模型与数据模型之间的对应关系,那么我们将会很快失控,那么领域模型显然能够解决这样的问题。下面我们来看下活动记录模式的实例。我们还是以购物流程为例。
- public class Order
- {
- private int _orderID;
- public Order(int orderID)
- {
- _orderID = orderID;
- }
- public int OrderID
- {
- get
- {
- return this._orderID;
- }
- set
- {
- this._orderID = value;
- }
- }
- private int _orderState;
- public int OrderState
- {
- get
- {
- return this._orderState;
- }
- set
- {
- this._orderState = value;
- }
- }
- /// <summary>
- /// 返回订单对应的所有产品信息
- /// </summary>
- /// <returns></returns>
- public List<Product> Products()
- {
- return this.GetProducts();
- }
- private List<Product> GetProducts()
- {
- List<Product> lists = new List<Product>();
- return lists;
- }
- public int Update()
- {
- return 0;
- }
- public int Delete()
- {
- return 0;
- }
- public int Insert()
- {
- return 0;
- }
- }
我们可以看到区别,从原来的表模式中的通过ADO.NET提供的内存集合表中的形式,修改为通过对象中的属性的形式来保存对象的数据信息,显然这就是表模式与活动记录模式的最大区别。不过实现的思想上差别不大。
我们都知道数据库表之间如果有关联的话,那么我们通过的是外键的形式来进行关联,那么我们在活动记录中一般如何来标识某个类对应的外键对象信息呢。
那么我们在订单中可能会有对应的用户ID,不过在不同的框架中可能对外键对应的对象信息的存储方式会有所不同,有些框架中在外键对象上通过属性的方式返回对象的实例的应用。简单来说下这2种方式的区别:例如:
- public class Order
- {
- private int _orderID;
- public Order(int orderID)
- {
- _orderID = orderID;
- }
- public int OrderID
- {
- get
- {
- return this._orderID;
- }
- set
- {
- this._orderID = value;
- }
- }
- private int _orderState;
- public int OrderState
- {
- get
- {
- return this._orderState;
- }
- set
- {
- this._orderState = value;
- }
- }
- private int _userID;
- public int UserID
- {
- get
- {
- return this._userID;
- }
- set
- {
- this._userID=value;
- }
- }
- }
另