• 领域驱动设计学习笔记 服务


         有时,服务不仅仅是一件事情。

         现在,最常犯的错误就是太轻易地放弃把这种行为配置到合适的对象中去,却逐渐地转移到程序设计上。但是当我们把一个对象里加入并不符合对象定义的操作,这个对象就失去了清楚的概念,反而变得难以理解或重构。

        服务除了其他们掌握的操作之外,它没有自己的任何状态,在领域中也没有任何意义。

        领域中的一些概念不能作为模型中的对象来处理。将领域需要的功能强行加给实体和值对象,不仅会破坏模型中的对象的定义,而且还会人为地添加没有意义的对象。

        服务作为一种接口提供操作,它独立于模型,没有像实体和值对象那样封装状态。服务在技术框架中是一种通用模式,但是它也可以应用于领域层。

        所谓服务,它强调的是与其他对象的联系。不像实体和值对象,服务完全是根据能够为客户做什么来定义的。服务往往代表一种行为,而不是一个实体,是一个动词而不是一个名词。服务有一个定义好的职责,它的职责和接口被定义为领域模型的一部分。调用的参数和返回的结果应该是领域对象。

       一个优秀的服务具备3钟特征:

         1.与领域概念相关的操作不是实体和值对象中固有的部分

         2.接口根据领域面向模型中的其他元素来定义

         3.操作是无状态的

        这种无状态是指任何一个客户都可以使用服务的所有实例,而不管这个实例的来源。服务的执行将使用全局可访问的信息,甚至改变这些信息(这也就是说它可能有副作用)。

         当领域中的一个重要进程或转换操作不是实体和值对象的时,把操作作为一种独立的接口加入模型,并声明服务。根据模型使用的语言来定义接口,保证操作名是通用语言的一部分,使这个服务变成无状态的。

  • 相关阅读:
    用Struts2框架报错:The Struts dispatcher cannot be found
    Struts2.0笔记二
    [转]使用Struts 2防止表单重复提交
    Struts配置文件报错"元素类型为 "package" 的内容必须匹配"
    Java基础知识
    Struts笔记二:栈值的内存区域及标签和拦截器
    [转]迭代器
    Struts笔记一
    账户注册激活邮件及登入和注销
    EL表达式获取对象属性的原理
  • 原文地址:https://www.cnblogs.com/laichenshui/p/1887561.html
Copyright © 2020-2023  润新知