领域驱动设计和实践
整个平台接纳了JavaEE的手艺及其相关的开源框架。系统的焦点营业逻辑由Domain层处置惩罚,其中的营业服务(BusinessService)卖力处置惩罚某个相对内聚的营业逻辑单元,同时对内对外提供当地或远程的服务。
下面是对各层的简要形貌:
- View:展示层,由于GAP平台主要面向B/S架构,展示层主要由web资源文件组成,包罗JSP,JS和大量的界面控件,同时还接纳了AJAX和Flex等RIA手艺,卖力向用户展现富厚的界面信息,并执行用户的下令。Control:控制层,卖力展示层请求的转发、调理和基础验证,同时自动阻挡后台返回的Runtime异常信息,若是控制层需要与第三方系统交互,可以通过Action做远程的请求。Domain:领域层,是系统最为富厚的一层,主要卖力处置惩罚整个系统的营业逻辑。这一层包罗营业服务和领域工具,同时卖力系统的事务治理。其中营业服务可以提供当地挪用和共享远程服务的功效。Persistence:持久化层,主要卖力数据持久化,支持O/R Mapping和JDBC。对数据源的会见提供多种方式。
另外,我们引入了Spring的IOC容器,系统的控制层、领域层和持久化层元素都有IOC容器统一治理,实现完全的接口分散息争耦。同时在控制、领域和持久化层都可以引用日志服务。
我们对领域驱动要素的界说上和原有的命名和寄义上稍有区别。
原来的服务(Service),我们界说为营业服务(BusinessService),面向营业服务的架构是GAP平台的焦点设计头脑,一个营业服务可以由一个或多个领域模子和数据会见工具(DAO)组成,去实现一个完整的营业逻辑单元。APP软件开发营业服务主要卖力事务处置惩罚和维护各个领域工具之间的关系,同时为上层会见提供当地和远程服务,服务类型包罗Web Service,RMI等。
领域工具由实体(Entity)和值工具(VO)组成,实体类具备自己的属性和行为、状态,可以聚合VO,实体类之间可以有聚合关联等关系,可以由数据会见工具(DAO)举行持久化。
持久化由数据会见工具(DAO)实现,不处置惩罚营业逻辑,主要卖力实体类的持久化。提供多种持久化方式(O/R Mapping和JDBC)。
那么怎样在去实现领域驱动设计呢?我们总结了以下四个步骤:
- 确定营业服务(Business Service):凭据营业需求和功效模块划分,确定营业单元,每个Business Service是一个内聚的营业单元,笼罩相关的领域工具。界说领域工具(Entity, VO):凭据营业单元的营业逻辑界说领域工具,通过UML要领和设计模式形貌领域工具。界说领域工具的属性和关联关系:确定领域工具的种种属性和各个领域工具之间的关联关系。为领域工具增添行为:凭据营业需求(系统用例和界面原型等)为领域工具增添行为,并界说哪些要领要被营业服务引用。
为了更好的明白领域驱动设计,我们基于以上设计要领,实现了一套简朴的网上书店系统。
网上书店系统是接纳DDD设计头脑构建的一个应用系统示例。通过网上书店系统,可以快速明白领域驱动设计。该系统实现网上书店的常用功效:包罗浏览书籍、挑选书籍、提交订单、检察订单、自动折扣、处置惩罚订单、作废订单等。未登任命户可以浏览和挑选书籍;已登任命户可以提交和检察自己相关的订单;治理员可以处置惩罚订单。
经由营业抽象,纵然是这样一个简朴的营业场景也包罗了许多领域工具,例如订单、账户、书籍、购物车、购物项、折扣等,通太过析和设计,我们可以获得这样的设计图(为了检察利便,图中的类隐藏了属性信息):
BookStoreAction卖力处置惩罚展现层的请求,并把请求转发给营业服务IBookStoreBS,营业服务卖力调理上图中显示的领域工具,处置惩罚该场景的所有营业。
其中领域工具和现实营业的对应关系为:
Account账户Order订单Book书籍Cart购物车Item订单项Discount折扣与事务剧本的编程模式差别,领域驱动设计不是把营业逻辑放在BS(BusinessService)中,而是由具备属性、行为和状态的领域工具处置惩罚。例如Order类,若是是血虚的POJO,那它内部只有与数据表字段对应的属性以及getter和setter要领,而在领域驱动设计中,则是一个相对自力的、能够处置惩罚自身关联营业的领域工具。在本系统中,我们对Order的形貌如下:
“沈阳软件公司”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与
我们联系删除或处理,客服QQ:55506560,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同
其观点或证实其内容的真实性。
热门文章
使用“扫一扫”即可将网页分享至朋友圈。