`

贫血模型架构的设计粒度问题

阅读更多

贫血模型与充血模型的讨论很多了,贫血模型是指建立的模型只有getset方法,只有属性没有行为,理想的领域模型是domain中包含大多数业务逻辑,service起到门面的作用,并且放置事务,如果采用贫血模型,现实中我们还是采用贫血模型也是能够解决问题的, 系统各层可能都会依赖domain model。

 



 

 

 

在这种架构下,我们写出的类、方法往往过大,往往是面

 

向过程思想。action --->service ----->dao,领域模型的构建与service的构建基本脱节,对于领域模型的行为,没

 

有清晰的位置约束,往往是一个大模块一个大service,导致这个模块的方法全部集中在这个service中,service的粒度

严重不合理,因此容易写出过于臃肿的service,service中的方法也往往过大。 

 

怎么解决呢?从业务模型或者领域模型入手,分析真正的领域模型,将真正的领域模型对应为我们的service。这个过

 

程是一个逐渐清晰逐渐分析的过程,也可能在系统分析初期,这些领域模型都没有建立起来,只是一些零散的业务概念,随

 

着系统分析的进行,领域模型逐渐清晰,进而转化为service。比如我们的网上购物系统,订单、顾客、商品是核心的业务

 

模型。

 

 

这里面临一个问题,就是什么是领域模型。首先区分建立的实体是DTO还是DOMAIN,不是有了getset方法的类就叫做领

 

域模型,不是为了向页面传输值在domain包下建立一个实体类,它是否有实际的业务含义,是否在系统的业务领域具有核

 

心的业务概念,一个页面展示的一条记录,肯定是有业务含义的,但是这个业务含义是否具有核心的业务概念是不一定的。

 

 

 

 

     DTO是用于展示数据的,而页面展示的数据不一定是领域模型的范畴。

 

    在报表型系统中,领域模型的概念很弱,报表展示的数据项,这些都是DTO,你说不出它是现实世界的什么名词,因此

 

这种查询实体一般不是domain而是DTO,我们甚至采用MAP向前台传值。这个时候我们的service怎么建立呢?? 一个

小模块一个service,但是必须保证service没有过多方法,且其依赖的service越少越好,如果依赖超过2个以上的

 

service,那么我就会考虑,是否需要将service简化,提炼出另外的类。

 

     同样,domain中的某些数据也不一定需要展示并传向页面,某些时候,可以使用domain向页面传值。

 

  • 大小: 3.7 KB
  • 大小: 36.2 KB
分享到:
评论

相关推荐

    支付场景的微服务架构介绍.docx

    而在传统的J2EE模型中,通常采用贫血模型,数据与行为分离。微服务的兴起,尤其是在借鉴了DDD中的限界上下文、子域和领域事件等概念后,使得DDD在业界获得了新的关注。 二、老支付架构的挑战 老式的支付架构往往...

    领域驱动设计和实践

    3. **避免“贫血”模型**:“贫血”模型是指那些缺乏业务逻辑的领域对象。这样的设计会导致业务逻辑散落在各个服务或控制器中,不利于维护和扩展。 4. **灵活运用模式**:领域驱动设计中有多种模式可以使用,如聚合...

    支付场景微服务实战

    - **充血模型**: 与贫血模型相反,领域对象包含了丰富的业务逻辑和行为,更符合领域驱动设计的原则。 - **限界上下文**: 是 DDD 中的一个概念,用来明确地界定不同领域模型的作用范围,有助于解决模型冲突和复杂度...

    数据库设计60个技巧

    41. **设计模式与最佳实践**:如贫血模型、富模型等,遵循业界最佳实践。 42. **数据加密**:敏感数据加密存储,保障信息安全。 43. **数据库设计的可维护性**:设计易于理解和修改的结构,便于后期维护。 44. **...

    领域驱动设计和实践.pdf

    DDD 是面向对象分析与设计的扩展,旨在解决大型企业级应用中的复杂业务逻辑问题。它通过清晰的分层架构和领域模型,确保了代码的可维护性、扩展性和复用性。 在 DDD 中,核心是领域模型,它由一系列细粒度的领域...

Global site tag (gtag.js) - Google Analytics