- public class Write
- {
- public static bool WriteLog(ILog log)
- {
- //具体的写如日志的方法。
- return true;
- }
- }
- 具体相关的产品类与产品分类对象的使用:
- /// <summary>
- /// 产品类
- /// </summary>
- public class Product : BaseWrite
- {
- //产品的相关属性
- public int ProductID { get;set;}
- public int ProductName { get;set;}
- public int ProductClassID { get;set;}
- public int ProductSort { get;set;}
- public int ProductIsEnable { get;set;}
- //产品类相关的方法
- public List<Product> GetAll()
- {
- return new List<Product>();
- }
- }
- public class ProductClass : BaseWrite
- {
- //产品分类相关属性
- public int ProductClassID { get;set;}
- public int ProductClassName { get;set;}
- public int ProductClassCategory { get;set;}
- public int ProductClassSort { get;set;}
- public int ProductClassIsEnable { get;set;}
- //产品分类相关的信息
- public List<ProductClass> GetAll()
- {
- return new List<ProductClass>();
- }
- }
我们看到了在活动记录模式中会将数据访问层的代码写在该层,但是领域模型中一般不会出现这样的代码。领域模型中只关心跟业务流程相关的内容,具体的数据持久化之类的内容一概不关心。领域模型中是一系列的对象之间的交互,那么我们可能会关心,如何将领域模型中的这些对象的状态进行保存呢,那么就会牵扯到对象模型到关系型数据库中持久化的个问题了,在持久化的问题上,我们可能有几种选择,一种是采用现有的ORM框架去实现对象数据的自动持久化,当然这是一种解决办法。有时候我们是通过手动的方式来进行持久化,可能就不存在这样的问题。
我们通常在持久化数据的问题上我们希望能做到持久化的透明性,这样就可以说具体的业务层不需要书写持久化的操作代码,当然我们现在设计的时候可能都是要么是通过特性来实现持久化,或者是通过继承基类的方式来做持久化的操作,那么可能带来如下的问题。
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="/uploadfile/201301/12/2A122036175.png" />
一般我们知道,一个类如果想不写相应的持久化代码还能实现持久化的话,那么我们只能通过动态的注入持久化代码的方式来实现这样的持久化透明的方案,微软的EntityFrameWork2.0中的POCO中的ORM方案,就是通过这样的方式来实现的。我们更关心的是代码应该放在何处,是在领域模型中还是领域模型外呢,当然目前的一些常见的框架中已有实现方案,其中大家熟知的NHibernate就是持久化透明的方式,大家如果感兴趣可以参考NHibernate的实现思路来做。一般对于这种动态注入代码的这样的方案,这里简单介绍下可能的实现,由于.NET framework 中提供了一个派生自特性类型的代理类,通过代理类来动态的将这个类的相关功能追加到指定的对象中,这就是所谓的动态代理,当然针对某个特定的类型这样来做,WCF也是通过代理类的