「这是我参与2022首次更文挑战的第11天,活动详情查看:2022首次更文挑战」
之前学到DDD的聚合根,接下来看看DDD中的其它概念。
实体和值对象
我们知道,在一个微服务中,聚合根对象意味着对象的根,只有它才可以依赖对象,其它对象不可以依赖根对象。那么在这个概念上,DDD对其进行了扩展,将对象分为了实体和值对象。我们来看下什么这些概念是什么。
贫血模型
在传统的web开发模式中,我们往往是以DTO(data transport object 数据传输对象)承载前端传输的数据。这些传输对象只有get set方法,这样的对象在DDD中称为贫血模型,意味着这些对象只能作为承载数据的箱子,没有办法干涉业务方法的流转。所以,以往我们在Service中,只会拿DTO里面的数据去做业务处理,所有的业务都由Service进行处理。Service层的就是这么不知不觉膨胀了起来。
实体
在DDD中,要求领域对象能够处理自己的业务,而不只是作为数据传输的承载个体。即:我们要将Service中的业务进行封装,将这些业务职能封装成一个个业务实体,将这些业务功能交由这些实体去执行。Service作为协调者,只对业务进行组装,不对业务进行处理。实时上,我们封装出来的对象就是我们上一篇文章提及的聚合根,它可以对外界的命令做出的动作进行处理和响应,有关业务的东西都由它负责。其实就是面向对象的概念。
值对象
实体是需要处理业务的,但是有的时候,我们的需要调用其它的业务对象获取数据,这个时候就不允许调用者修改实体内的数据。DDD里,值对象作为业务对象沟通之间的角色登场,它和我们之前提及的DTO一样,只是作为数据传输对象存在,在两个业务对象之间承载传输的数据。需要注意的是,值对象内的字段应该是由final修饰的,意味着一旦值对象生成之后就不可以进行改变。如有需要修改对象的数据,应该由业务对象,即实体负责。