【Jsp精品源码栏目提醒】:网学会员,鉴于大家对Jsp精品源码十分关注,论文会员在此为大家搜集整理了“[计算机]实战DDD - 操作系统”一文,供大家参考学习!
解惑授道企业信息化解决之道 首 页 设计研究 构件产品 培训咨询 Jdon框架 论坛 AOP DDD EJB Hibernate IOC Spring Struts 搜索Jdon框架演示 JiveJdon3.0
源码下载 GoF设计模式 在线教程 社区精彩讨论 实战DDDDomain-Driven Design领域驱动设计:Evans DDD 板桥里人 http://www.jdon.com 2006/7/10转载请保留 2004年著名建模专家Eric Evans发表了他最具影响力的著名书籍Domain-Driven Design –Tackling Complexity in the Heart of Software中文译名领域驱动设计 2006年3月清华出版社译本或称 Domain Driven-Design architecture Evans DDD。
Martin Fowler作序说“希望本书是一本非常有影响力的书籍....... Eric最值得我尊敬的一个方面是他敢于讨论还未取得成功的事情”其实时值今年2006年DDD开发框架已经层出不穷如RoR、RIFE、JdonFramework等我们项目软件包结构都变成了这样xxx.modelxxx.serviceDDD思想已经遍地开花不能再说不成功了。
DDD是告诉我们如何做好业务层并以领域驱动设计思想来选择和合适的框架本文以基于JdonFramework开发的JiveJdon3.0说明DDD方法的实战应用。
首先必须认识到领域建模是一种艺术的技术不是数学的技术它是用来解决复杂软件快速应付变化的解决之道快速适应需求变化的软件复用。
我们知道软件的产生过程是分析、设计、编程、测试、部署。
过去分析领域和软件设计是分裂的分析人员从领域中收集基本概念而设计必须指明一组能北项目中适应编程工具构造的组件这些组件必须能够在目标环境中有效执行并能够正确解决应用程序出现的问题。
模型驱动设计Model-Driven Design抛弃了分裂分析模型与设计的做法使用单一的模型来满足这两方面的要求。
这就是领域模型。
单一的领域模型同时满足分析原型和软件设计如果一个模型实现时不实用重新寻找新模型。
如果模型没有忠实表达领域关键概念时也必须重新寻找新的模型。
建模和设计成为单个迭代循环。
将领域模型和设计紧密联系。
因此建模专家必须懂设计会编程。
分层架构 最初层次只分为三层表现层、业务层和持久层DDD其实告诉我们如何让实现业务层 一位道友曾经请教层次的职责对服务Service提出疑问。
根据Eric的理论业务层将细分为两个层次应用层和领域层。
它们的定义是应用层定义软件可以完成的工作并且指挥具有丰富含义的领域对象来解决问题保持精练不包括业务规则或知识无业务情况的状态 领域层负责表示业务概念、业务状态的信息和业务规则是业务软件核心。
层次之间必须清晰分离每个层都是内聚的并且只依赖它的下层为了实现各层的最大解耦Ioc模式和Ioc容器是目前最好的选择JdonFramework使用基于PicoContainer的Ioc容器实现了各层的松耦合 Eric特别指出那种将业务逻辑交由业务界面处理的快速UI方式是旁门左道。
希望象C/S结构那样可视化拖拖图形就完成的软件开发是一种错误的方向开发时快速难于维护和扩展虽然使用J2EE技术其实是一种伪多层技术。
可惜有很多国人在疯狂开发这类工具大有不撞南墙不低头之势并且疯狂误导很多非专业人士可悲可叹如果对这段言论持不同意见建议你购买领域驱动设计这本译书见P53页。
领域模型种类 传统模型分为两种实体Entity和值对象Value Object现在服务Service成为第三种模型元素。
实体Entity定义通过一系列连续性continuity和标识identity ID来定义个人认为它和分析领域的四色原型中的PPT原型非常类似可以看成是PPT原型延续。
实体必须拥有自己的唯一ID主键如果没有一个ID标识为每个实例加上一个具有唯一性ID可能是内部使用。
如JiveJdon3.0中jdonframework.xml中模型增删改查CRUD配置定义 ..... 页码1/4实战DDDDomain-Driven Design领域驱动设计:Eric Evans DDD2008-3-18http://www.jdon.com/mda/ddd.html 设计类项目外包完全来自于海 设计类项目外包完全来自于海外的非凡机会。
平面.. www.mytino.com亚克迪生股份有限公司模型 咨询电话01061506789专门制造模型模具、真空.. www.arrk.com.cnYaris雅力士彩绘智绘我本色 设计彩绘设计网络大赛展示你的想法、绘出您的创意.. www.YarisChina.com广州搏是专业标识设计公司 广州搏是公司是广告业中创立较早、颇具影响力的专业.. www.bosth.cn精睿大连设计沈阳分公司 来自上海的创意团队—专业的VI企业形象设计产品包.. www.kinrin-china.com 其中forumId是模型com.jdon.jivejdon.model.Forum的主键唯一ID每个模型必须有一个专家。
值对象Value Object如果一个对象代表了领域的某种描述性特征且没有概念性的标识。
个人认为它是四色原型中Description原型延续。
如果我们只关心模型中一个元素的属性那么把这个元素划为值对象。
值对象是不可变的不要给它任何标识避免实体的维护性降低设计复杂性。
我们不关心值对象是哪个实例。
在JiveJdon3.0中ForumState是一个值对象它表示论坛当前最新帖子、论坛的主题数量和帖子数量它的根对象是Forum是被内聚嵌入到Forum这个实体模型中的代码如下 同样ForumThreadState是也是一种值对象根据Eric的值对象设计ForumThreadState和ForumState是可以合并成一个对象的值对象中没有ID等唯一标识。
Eric认为服务Service是描述领域概念最自然的方式是四色原型的MI原型的延续 优秀服务3个特征 1.与领域概念相关的操作行为、但不是实体和值对象中固有的部分。
2.接口根据领域模型中其他元素定义 3.操作是无状态的。
在JiveJdon3中com.jdon.jivejdon.service.ForumService和Forum实体模型及其值对象ForumState共同完成领域模型其中ForumService属于应用服务层而后两者属于领域层其他服务ForumMessageService、AccountService和UploadService等都是此类性质。
领域对象的生命周期Scope Spring 1.x刚出来时确实忽悠了大家一把因为他没有领域对象的生命周期支持直到Spring 2.0才将如new Bean scope当初那些疯狂捧Spring 1.x 臭脚的所谓高手是不是还是基于数据库驱动的思维根本没有真正OO模式思维当今天JBoss Seam、Scopes等框架开始重视对象生命周期支持后曾经发生在Jdon社区争战硝烟已经过去成为历史。
package com.jdon.jivejdon.model / Forum State ValueObject this is a embeded class in Forum. author banq / public class ForumState private int threadCount 0 //主题数量 private int messageCount 0//帖子数量 private ForumMessage lastPost //最新帖子 public int getMessageCount return messageCount ...... 页码2/4实战DDDDomain-Driven Design领域驱动设计:Eric Evans DDD2008-3-18http://www.jdon.com/mda/ddd.html Eric认为每个对象独有器生命周期一个对象在创建以后可能要经历各种不同的状态并最终消亡。
对象生命周期由长短临时对象常驻内存有的与其他对象存在复杂的依赖关系状态变化时必须满足一些不变量的约束条件。
如何管理这些对象提出挑战处理不好会偏离MDD的方向。
在生命周期中维护对象的完整性。
避免模型由于管理生命周期的复杂性而陷入困境。
有 三个模式来处理聚合Aggregate定义清晰的所有权和边界使模型更加紧凑避免出现盘根错节的对象关系网工厂Factory和组合Respository。
当一个对象生命周期之始使用工厂和组合提供了访问和控制模型对象的方法完善了MDD。
建立聚合的模型并且把工厂和组合加入设计中来可以使我们系统地对模型对象进行管理。
聚合圈出一个范伟在这个范围中对象无论在哪个生命周期保持不变性。
在JiveJdon3.0中值对象ForumState是被聚合在实体模型Forum中Forum作为ForumState的一个根由于它们数据必须保持一致性不变量invariant是指无论何时发生数据变化必须满足一致性规则由于根控制了访问就无法绕过它修改内部元素例如如果没有Forum实体对象这个根就无法去修改对象状态ForumStateForumState获得是通过Forum的getter方法获得的。
ForumState和Forum的分离有可以使修改论坛状态数据当发一个新帖时必须更新当前论坛的最新帖子为该新帖不会影响到Forum其他元素特别是使用事务锁定时不必锁住整个对象见领域驱动设计书籍P92。
另外ForumThread和ForumMessage的关联关系必设定成单向的而不是双向的因为领域建模中关联越简单越好。
在JiveJdon3.0中你可能注意到有一个com.jdon.jivejdon.service.factory.ForumBuilder所有实体模型对象的获得都是从这个工厂创建出来的我曾经徘徊过这个工厂类是否应该属于持久层因为JiveJdon3.0持久层没有使用Hibernate这样O/R Mapping框架而是直接使用SQL但是从持久层输出的都是对象这是必须坚持的一个设计原则好像是MF的一个什么元数据模式 。
但是Eric明确告诉我们领域模型的工厂属于应用层页就是还是应该处于业务层的这样好处很多业务层设计根本无需从Hibernate等持久层框架获得而是从自己的工厂获得。
组合Respository又被翻译成仓储我认为组合合适主要用来返回一批对象查询组合常用来返回批量查询结果JdonFramework两个快速开发支持批量查询其实应该是Respository的实现实际也是过去Master-details的一种查询实现。
以com.jdon.jivejdon.presentation.action.ThreadListAction为例子其功能是查询论坛Forum下所有主题ForumThread并分页显示实现效果按这里我们在customizeListForm方法中将根Model Forum设置进入在threadList.
jsp中我们使用struts的标签库logic:iterator来遍历组合对象threadListForm中的ForumThread集合。
失血模型 MFMartin Fowler曾经提出有名的贫血模型或失血模型让我们好生迷惑和彷徨他认为实体模型对象中只有弱行为setter和getter方法没有真正行为好像缺少血液的人不和谐了不少高手又被忽悠了大谈贫血模型。
其实Eric已经认为在DDD中领域中一些概念不能作为模型中的对象来处理的如果将这些功能概念强行加给实体对象和值对象破坏模型中对象的定义人为添加没有意义的对象。
服务是描述领域概念最自然的方式。
为了在这些大师之间取得一个平衡有人将Model的持久化操作CRUD行为整入到领域模型中这是不是违背当初Dao模式初衷Dao模式其实是桥模式和适配器模式组合见SUN的J2EE核心模式。
无论如何我们的DDD项目中都是以失血模型存在着所以Eric呼唤建模专家必须懂得实现懂得软件技术MF可能会听进去的。
本站提供DDD领域建模培训 相关文章 面向对象建模与数据表建模两种分析设计方法的比较 面向对象与领域建模 页码3/4实战DDDDomain-Driven Design领域驱动设计:Eric Evans DDD2008-3-18http://www.jdon.com/mda/ddd.html 状态对象数据库的替代者 数据库时代的终结 快速适应需求变化的软件复用 Java项目开发中常见根本性认识误区 领域模型驱动设计DDD之模型提炼 Ruby On Rails 与Jdon Framework架构比较 Organizing Domain Logic Java EE/J2EE面向对象编程之道 贫血和充血模型的比较之我见 更多关于DDD讨论 讨论 热点讨论more ?? MVC和struts 29 回复 ?? 什么是OO思想 29 回复 ?? 两年的技术经历在J2EE上疑惑 29 回复 ?? 彭老大人浮躁了咋办 28 回复 ?? 我决定放弃JDON了 28 回复 ?? tomcat的运行的时候GC进行内存回收回收后的内存是还给OS还是还给JVM 28 回复 ?? 【求助】自己想找个项目练手不知如何下手 28 回复 ?? 依赖注入真的能够降低耦合吗 28 回复 ?? 不要误解和小看SOA的架构思路 27 回复 ?? 各位问个我昨天面试的问题。
27 回复 秦皇岛清华万博数据库开发工程师培训系统集成工程师培训网络工程师培训就业岗位 清华万博数据库开发工程师...www.qhdwnt.com大连晋兴会计教学做融为一体通过短期学习达到企业用人标准.让上岗证和出纳 大连晋兴会计实战培训实...www.jxkuaiji.com通用的java混淆器都有一些办法来被破解普通的加密锁提供的api方案也不可行 java代码保护方案以色...www.prosperousness.com.c...123 沈阳北大青鸟恒基中心专...沈阳北大青鸟恒基中心北大青鸟总部在沈阳设立的优www.bdqn-ln.com 北大青鸟大连高新中心 专...大连高新中心是北大青鸟大连地区
精品示范中心和星www.0411edu.com.cn 清华万博数据库开发工程师...秦皇岛清华万博数据库开发工程师培训系统集成工程www.qhdwnt.com java代码保护方案以色...通用的java混淆器都有一些办法来被破解普通的www.prosperousness...联系我们 关于我们 RSS订阅 广告联系 网站地图 加入收藏夹 Copyright C 2006 Jdon.com All Rights Reserved 版权所有 上海解道计算机技术有限公司 沪ICP备05018152号 如有意见请与我们联系 Powered by JdonFramework 页码4/4实战DDDDomain-Driven Design领域驱动设计:Eric Evans DDD2008-3-18http://www.jdon.com/mda/ddd.html