zoukankan      html  css  js  c++  java
  • 富领域模型和贫血领域模型

    贫血领域模型一个明显的特征是:它仅仅是看上去和领域模型一样,都是对象,都以领域空间中定
    义的名词命名,这些对象通过实际领域模型中丰富的关系和结构相互关联。但是观察模型所持有的
    业务逻辑时会发现,贫血模型中除了大量 getter 和 setter,几乎没有其他业务逻辑。
    当然,在使用贫血领域模型时,那些数据模型会从一系列服务对象(传统上称为业务层)中使用,这些
    服务对象会捕获所有领域或业务逻辑。业务层位于数据模型层之上,并仅将数据模型作为数据使用。
    贫血领域模型只是一种过程化的风格设计。因为缺乏行为(方法),贫血实体对象不是真正的对象。它
    们只有数据属性,因此也不是面向对象的设计。通过将所有行为放到服务对象(业务层)中,最终得到
    的是面条式代码或事务性脚本,因此失去了领域模型提供的优势。
    无论如何,如果微服务或限界上下文非常简单(如 CRUD 服务),使用表现为只有数据属性的实体对
    象的贫血领域模型或许足够了,此时可能不值得实现更复杂的 DDD 模式。这种情况下,它将是一个简
    单的持久化模型,因为已经有意为 CRUD 这个目标创建了只有数据的实体。
    因此微服务架构完美适用于依赖每个限界上下文的多重架构方法。例如在 eShopOonContainers 中,订
    单微服务实现了 DDD 模式,但简单的 CRUD 服务,如目录微服务就没有用到。
    有人说贫血领域模型是一个反模式。这其实取决于要实现什么。如果正在创建的微服务足够简单(如
    CRUD 服务),遵循贫血领域模型就不是反模式。但如果要应对微服务的领域有很多不断变化的业务规
    则并且很复杂,贫血领域模型对这样的微服务或限界上下文可能就是一个反模式。这种情况下,将其设
    计为包含数据和行为以及实现额外的 DDD 模式(聚合,值对象等等)的富模型,或许对微服务的长期
    成功有更大好处。

      

  • 相关阅读:
    Ts基础
    SWF 文件不能本地访问 只有仅限于文件系统的 SWF 文件
    laya的UI编辑器
    目前支持WebGL的浏览器有哪些?
    Laya学习
    egret学习
    PHP 获取上月,本月,近15天,近30天日期
    深入浅出:MySQL的左连接、右连接、内连接
    div中 li宽度不固定 ie6和ie7不兼容不自动换行
    8款给力HTML5/CSS3应用插件 可爱的HTML5笑脸
  • 原文地址:https://www.cnblogs.com/qinwei/p/10219714.html
Copyright © 2011-2022 走看看