常言笑的家

Spring, Hibernate, Struts, Ajax, RoR

Domain-Driven Design领域驱动设计(续)

     最初层次只分为三层:表现层、业务层和持久层;DDD其实告诉我们如何让实现业务层
 
      按照DDD领域建模观点看,中间业务层还应该再分为应用层和领域层(具体文章见http://domaindrivendesign.org)。Service属于应用层,Domain则属于领域层。它们的定义是:应用层:定义软件可以完成的工作,并且指挥具有丰富含义的领域对象来解决问题,保持精练;不包括业务规则或知识,无业务情况的状态; 领域层:负责表示业务概念、业务状态的信息和业务规则,是业务软件核心。

  层次之间必须清晰分离,每个层都是内聚的,并且只依赖它的下层,为了实现各层的最大解耦,Ioc模式和Ioc容器是目前最好的选择。

      在DDD观点看来,领域模型Domain其实分为三种元素:实体Enity、值对象( Object)和服务(Service)。

      模型对象分实体和值对象,其实就是实体对象和对象状态的区分,值对象表示对象状态,在JiveJdon3中,有ForumState和ForumThreadState,其实它们就是值对象,对象状态非常重要,它和对象生命周期scope有密切关系,最近出了一个Scopes开源免费框架就是专门提供对象生命周期管理的,所以,作为一个业务层框架必须有提供生命周期管理功能。


状态对象:数据库的替代者

      服务是一些行为功能,有人指出没有行为的模型只有getter/setter,是不是贫血模型,或者叫失血模型,DDD专家Eric Evans认为:将领域需要的功能强加给实体和值对象,不仅会破坏模型中对象定义,而且会认为地添加毫无意义的对象,

失血模型的请教

posted on 2006-12-16 22:23 常言笑 阅读(227) 评论(0)  编辑  收藏 所属分类: 技术总结


只有注册用户登录后才能发表评论。


网站导航:
 

My Links

Blog Stats

常用链接

留言簿(5)

随笔分类

随笔档案

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜