<b>大型网站复杂业务持续重构之道:全程领域建模实践</b>

作者: 来源:未知 2012-04-27 20:49:47 阅读 我要评论 直达商品

  三、建立技术框架

  这一点,是《领域驱动设计》这本书没有过多提及的内容。这个需要结合你们公司的原来技术框架用最小化改造成本最大化收益的方式来建立领域驱动的技术框架。下面是一个可以广泛使用的领域驱动的技术框架,可以在这之上增加更多的个性元素形成你公司自己的框架。

  

 

  图3 领域驱动设计参考技术框架图

  这个框架的各个元素基本上在 《领域驱动设计》一书中都可以找到对应的解释,但这里需要解释一下我建立这个框架的个性理解:

  领域对外(页面、AJAX、ESB调用)只暴露领域服务,其它所有领域类都是包内自闭的,对外不可见。

  基础仓库的引入,基础仓库是一个抽象的仓库,它封装了大量常用工具方法、业务对象生命周期维护(实体OR映射、DAO调用)、外部接口调用。可以降低业务仓库不必要的重复编码与复杂性。业务仓库是继承基础仓库的子类。

  基础设施的引用,基础设施是用来承载引用非领域调用的桩,我们在使用领域驱动设计的时候往往是从一个旧的系统重构开始。这时我们不可能要求所有的业务子系统相互调用都通过Domain Service调用,这时我们可以通过Infrastructure优美的把调用封装在业务仓库的业务方法内。

  四、重构受影响领域的设计与编码

  

 

  图4 重构后的商品详情页类图

  Spark以商品详情页这个Use Case为例展示了以领域驱动设计的重构类图:

  增加行为表ProductExt用于存储商品的扩展信息,如预约时间段、预约医院。并为表建立一一对应的实体Entity。

  基础仓库Repository通过Infrastructure中的DAO封装了对实体的操作,如create()、update()、delete()、findById()、findList()

  商品业务仓库ProductRepository扩展了基础仓库,客户程序可以用productId为参数,通过ProductVo.getProduct()方法获得商品详细信息的业务实现,由于业务仓库的的公开方法对外返回的都是Value Object,因此不会直接暴露Entity类型给客户程序。

  GetProductService服务类通过invoke()服务方法 对外(商品详情页面)提供服务,它通调用业务仓库中的业务方法,并将接口规格化。

  在Spark的帮助下,Jack Chen成功的脱离了困境。现在他正在公司里积极推行自己的领域驱动设计框架,他们公司的网站正在以每三周一次的重构速度快速迭代演进。他象Spark一样,成为了一个领域驱动的布道者。

  来源:InfoQ


  推荐阅读

  软文写作“三板斧”以理服人 以情动人 以诚感人

在写这篇文章的时候,行文天下首先想起的不是下文该怎么写,而是想起《隋唐英雄传》中的程咬金。这位豪爽义气却又透着可爱的猛将,在众多人物中算得上运气最好的一位。虽然文不及李密,武不及秦琼 ,但是他却靠自己的>>>详细阅读


本文标题:<b>大型网站复杂业务持续重构之道:全程领域建模实践</b>

地址:http://www.lgo100.com/a/22/20120427/55629.html

顶一下

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
我的评论: 人参与评论
验证码: 匿名回答
网友评论(点击查看更多条评论)
友情提示: 登录后发表评论,可以直接从评论中的用户名进入您的个人空间,让更多网友认识您。
自媒体专栏

评论

热度