提出问题
在我大学毕业的时候,曾做过一些项目,常常会在业务对象中直接写入用户界面、数据库访问等支持代码,而一些业务逻辑则会被嵌入到用户界面组件和数据库脚本中。这也是为了以最简单的方式短期内完成任务。
如果和领域有关的代码分散在大量的其他代码之中,那么查看和分析领域代码就会变得异常困难。
关注点分离
要想创建出能够处理复杂任务的程序,需要做到关注点分离,使得设计中的每个部分都得到独特的关注。
领域驱动设计中,最常用的分层架构设计是,用户界面层,应用层,领域层,基础设施层。
领域对象应该将是重点放在如何表达领域模型上,而不需要考虑自己的显示和存储问题。这样就可以使得模型的含义足够丰富,结构足够清晰,可以捕捉基本的业务知识,才是实现Model-Driven-Desgin的关键。
领域实体Entity
Entity可以是任何事物,只要满足两个条件:
- 它的生命周期中具有连续性;
- 它的区别并不是由那些对用户非常重要的属性决定的;
在区分一个对象的时候,我们要确保每个对象有唯一的结果,例如演唱会的座位号是唯一的,那么座位就是Entity,如果采用入场券的方式,那么座位就不是Entity。
所以我们区分实体的时候应当考虑它的属性和行为。