领域驱动建模(EvansDDD).ppt

  1. 1、本文档共70页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
职责实现 一个对象能够扮演多个角色 使用方法行为来实现职责。 不同角色有不同方法,如何解决这个矛盾? DCI架构 数据Data:领域模型。 场景Context:领域模型活动存在的场景,或者前提条件。 交互Interactions:模型在特定场景下以某种角色活动的行为操作。不同角色有不同的交互。 DCI架构和服务 @Stateless @Context public class ForecastingContext implements ForecastingContextLocal { /** * an asynchrounous method for determining the energy requirements of the given trip. */ @Asynchronous public Future forecastEnergyRequired(Trip trip) { BehaviourInjector bi = new BehaviourInjector(this); //场景将实体对象下塑为角色,开始交互行为 DCI典型调用方式 EnergyConciousTrip t = bi.assignRole(trip, EnergyConciousTrip.class); double energy = t.forecastEnergyRequirements(); return new AsyncResult(energy); } } Domain Events领域事件 领域事件是在不同场景下由实体发出事件驱动服务,通过类似异步消息机制实现松耦合。场景隐含,事件代表场景出头牵线。 DCI架构是主动将功能实现的参与者(数据模型 角色和行为 场景)进行动态组合。 领域时间和DCI架构都将薄化服务模型,减少服务模型臃肿的现象(或者MVC的控制器)。 Domain Events Download Source Domain Events 工作原理 Domain Model @Model Listerner @Component Java concurrent Future Domain Message Pool.run 开源框架JdonFramework提供DE机制 /jdonframework/ CQRS架构(Command Query Responsibility Segregation ) 读写分离;更加伸缩: (1)写 == Commands命令 == 主要是改变模型状态,无返回结果。 (2)读 == Queries查询 == 纯粹读取,不改变任何模型状态。 使用基于Domain Events的EDA架构(Event-Driven Architecture)。可扩展至消息或异步系统。 CQRS(命令查询分离)架构 User interface Service Domain Event/Message BUS Infrastructure Query/ Reporting Commands Commands Events 更多资料和资源 DDD领域驱动设计: /jivejdon/tags/272 CQRS架构:/jivejdon/tags/9958 DCI架构:/jivejdon/tags/10443 DDD开放源码案例系统JiveJdon: /jdonframework/jivejdon3/index.html * 值对象设计 由于不关心软件运行时使用的是值对象的哪个实例,没有了分辨拘束,可提升性能和优化。 值对象复制性:两个人具有相同名字,表示名字的值对象可以互换复制,不会使他们成为一个人。 值对象共享性:两个Person对象不需要自己各自的Name值对象,可以共用一个Name值对象。 值对象不变性:值对象属于实体,当实体把它的值对象传递给其他对象时,如果其他对象对这个传过来的值对象修改不当,就会破坏其所有者的不变性约束,从而破坏它的所有者实体对象。 值对象共享 值对象非常巨大,每个电源插座都是一个值对象,一个房子有上百个插座对象,由于值对象可以互换 共享,只使用一个插座实例就可以。 Flyweight模式:避免大量拥有相同内容的小类的开销(如耗费内存),使大家共享一个类(元类)。 不适用于实体。 值对象复制 Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节。 Java的clone也是一种复制。 复制产生大量对象会阻塞系统,但适合在分布式系统中,相反,使用共享,会降低性能; 高并发系统中,复制减少锁处理,共享需要精妙的锁处理技巧。 实体和值对象区分 区分实体和值对象有助于我们在分析需求时抓住

文档评论(0)

benzei244572 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档