领域驱动设计和开发实战

北京中科医院好不好 https://myyk.familydoctor.com.cn/2831/detail/
示例应用

本文中使用的示例应用是一个住房贷款处理系统,业务用例是批准住房贷款(抵押)的资金申请。将贷款申请提交给抵押放贷公司的时候,首先要通过承保过程,承保人在这一过程中根据客户的收入详情、信用历史记录和其它因素来决定批准还是拒绝贷款请求。如果贷款申请获得承保组的批准,就进入贷款审批程序的结清和融资步骤。

贷款处理系统中的融资模块自动给贷款人支付资金。通常,融资过程从抵押放贷公司(通常是银行)将贷款包递交给产权公司开始。接着产权公司评估贷款包,并与房产买卖双方一起确定结清贷款的时间。贷款人和卖方与结算中介在产权公司会面、签署书面协议,来转移房产产权。

架构

典型的企业应用架构由下面四个概念上的层组成:

用户界面(表现层):负责给用户展示信息,并解释用户命令。

应用层:该层协调应用程序的活动。不包括任何业务逻辑,不保存业务对象的状态,但能保存应用程序任务过程的状态。

领域层:这一层包括业务领域的信息。业务对象的状态在这里保存。业务对象的持久化和它们的状态可能会委托给基础设施层。

基础设施层:对其它层来说,这一层是一个支持性的库。它提供层之间的信息传递,实现业务对象的持久化,包含对用户界面层的支持性库等。

让我们更详细地看一下应用层和领域层。应用层:

负责应用中UI屏幕之间的导航,以及与其它系统应用层之间的交互。

还能对用户输入的数据进行基本(非业务相关)的验证,然后再把数据传到应用的其它层(更底层)。

不包含任何业务、领域相关的逻辑、或数据访问逻辑。

没有任何反映商业用例的状态,但却能处理用户会话或任务进展的状态。

领域层:

负责业务领域的概念,业务用例和业务规则的相关信息。领域对象封装了业务实体的状态和行为。贷款处理应用中的业务实体例子有抵押(Mortgage)、房产(Property)和贷款人(Borrower)。

如果用例跨越多个用户请求(比如贷款登记过程包含多个步骤:用户输入贷款详细信息,系统基于贷款特性返回产品和利率,用户选择特定的产品/利率组合,最后系统会用这个利率锁定贷款),还可以管理业务用例的状态(会话)。

包含服务对象,这些服务对象只包含一个定义好的、不属于任何领域对象的可操作行为。服务封装了业务领域的状态,而业务领域并不适用于领域对象本身。

是商业应用的核心,应该与应用的其它层隔离开来。而且,它不应该依赖于其它层使用的应用框架(JSP/JSF、Struts、EJB、Hibernate、XMLBeans等)。

下面的图2显示了应用中使用的不同架构层次,以及它们与DDD有怎样的关系。

图2.多层应用架构图(点击查看大图)

下面的设计观点被认为是目前DDD实现诀窍的主要部分:

面向对象编程(OOP)

依赖注入(DI)

面向方面编程(AOP)

OOP是领域实现中最重要的基本原则。应该利用像继承、封装和多态这样的OOP概念,使用PlainJava类和接口来设计领域对象。大部分领域元素是既有状态(属性)又有行为(操作状态的方法或操作)的真正对象。它们同时对应于真实世界的概念,能很合适地适用于OOP概念。DDD中的实体和值对象都是OOP概念的典型例子,因为它们同时有状态和行为。

在典型的工作单元(UOW)中,领域对象需要与其它的对象协作,无论这些对象是服务、资源库、还是工厂。领域对象还需要处理其它那些本身就横切的


转载请注明:http://www.guyukameng.com/html/html1/13436.html

  • 上一篇文章:
  •   
  • 下一篇文章: