菜单
  

     

    层结构的划分是很有必要的,只有清晰的结构,那么最终的领域设计才宜用,比如用户要预定航班,向Application Layer的service发起请求,而后Domain Layler从Infrastructure Layer获取领域对象,校验通过后会更新用户状态,最后再次通过Infratructure Layer持久化到数据库中。

     

    实体(Entity) & 值对象(Value Object)

    实体与面向对象中的概念类似,在这里再次提出是因为它是领域模型的基本元素。在领域模型中,实体应该具有唯一的标识符,从设计的一开始就应该考虑实体,决定是否建立一个实体也是十分重要的。

     

    值对象和我们说的编程中数值类型的变量是不同的,它仅仅是没有唯一标识符的实体,比如有两个收获地址的信息完全一样,那它就是值对象,并不是实体。值对象在领域模型中是可以被共享的,他们应该是“不可变的”(只读的),当有其他地方需要用到值对象时,可以将它的副本作为参数传递。

     

    服务(Services)

    当我们在分析某一领域时,一直在尝试如何将信息转化为领域模型,但并非所有的点我们都能用Model来涵盖。对象应当有属性,状态和行为,但有时领域中有一些行为是无法映射到具体的对象中的,我们也不能强行将其放入在某一个模型对象中,而将其单独作为一个方法又没有地方,此时就需要服务.

     

    服务是无状态的,对象是有状态的。所谓状态,就是对象的基本属性:高矮胖瘦,年轻漂亮。服务本身也是对象,但它却没有属性(只有行为),因此说是无状态的。

     

    PS:这与我们常说的服务器的状态是两个概念,无状态的服务器是指,对服务器来说每次接收到的HTTP请求都像是客户端第一次发送的一样;而有状态的服务器就会存储客户端的状态,常见的就是Cookie&Session

     

    服务存在的目的就是为领域提供简单的方法。为了提供大量便捷的方法,自然要关联许多领域模型,所以说,行为(Action)天生就应该存在于服务中。

     

    服务具有以下特点:

     

    a)服务中体现的行为一定是不属于任何实体和值对象的,但它属于领域模型的范围内

    b)服务的行为一定设计其他多个对象

    c)服务的操作是无状态的

     

    PS:不要随意放置服务,如果该行为是属于应用层的,那就应该放在那;如果它为领域模型服务,那它就应该存储在领域层中,要避免业务的服务直接操作数据库,最好通过DAO。

     

    模块(Moudles)

    对于一个复杂的应用来说,领域模型将会变的越来越大,以至于很难去描述和理解,更别提模型之间的关系了。模块的出现,就是为了组织统一的模型概念来达到减少复杂性的目的的。而另一个原因则是模块可以提高代码质量和可维护性,比如我们常说的高内聚,低耦合就是要提倡将相关的类内聚在一起实现模块化。

    模块应当有对外的统一接口供其他模块调用,比如有三个对象在模块a中,那么模块b不应该直接操作这三个对象,而是操作暴露的接口。模块的命名也很有讲究,最好能够深层次反映领域模型。

    聚合(Aggregates)

    聚合被看作是多个模型单元间的组合,它定义了模型的关系和边界。每个聚合都有一个根,根是一个实体,并且是唯一可被外访问的。正是如此,聚合可以保证多个模型单元的不变性,因为其他模型都参考聚合的根。所以要想改变其他对象,只能通过聚合的根去操作。根如果没有了,那么聚合中的其他对象也将不存在。

  1. 上一篇:琉璃神社,琉璃神社神秘代码
  2. 下一篇:permission denied解决方法没有权限
  1. 商铺九一分成什么意思 小...

  2. 男生做手艺湜什么意思,...

  3. 农村加盟项目排行榜,捞...

  4. 男生传统手艺湜什么意思...

  5. 男人想让你跟他做生意,...

  6. 哪里要回收旧衣服统货 旧...

  7. 丧尸药浴盐土冰的真正名称是什么

  8. 进出口贸易与经济增长文献综述和参考文献

  9. 多级反馈队列调度算法的研究+源代码

  10. 货币国际化国内外研究现状

  11. Toeplitz定理及其应用+文献综述

  12. 身体自尊量表(PSPP)

  13. 甲硫醇钠生产工艺设计任务书

  14. 街头游园设计

  15. 运动员广告形象塑造文献综述和参考文献

  16. 玫瑰精油特征香气成分研究

  17. 从何红舟《桥上的风景》中感受油画构成美

  

About

优尔论文网手机版...

主页:http://www.youerw.com

关闭返回