领域驱动设计(DDD :Domain-Driven Design)相关的思考

今天,技术总监给我们上了一堂有关DDD 的课程,感触颇多,特此记录!

1、问题

1.1、面向对象

虽然一直在说面向对象编程,但实际开发中一直没有做深入思考,更谈不上去用了,惭愧。

一个Class要有属性和行为,属性是对状态的描述,而行为是对属性进行改变所做的一些操作。当前项目中也有太多的残缺类(一个实体类中只有getter和setter 方法,基本上没有什么行为,故曰残缺类)。

我们来看一下 java.util.ArrayList.java,该类中的属性只有一个:

 transient Object[] elementData; // non-private to simplify nested class access

其他的像grow()、indexOf()等方法都是对该属性的操作,而且方法数远远大于属性,这才是一个正确的类,我们要对属性进行深入分析,发掘其一系列行为,让其变得高内聚、松耦合。

2、领域驱动设计思想及发展

2004年Eric Evans在其书中《领域驱动设计—软件核心复杂性应对之道》提出了“领域驱动设计(简称DDD)”的概念。

此后一批专家陆续出版了DDD相关的书籍,丰富了领域驱动设计的实践,其中有<Applying Domain-Driven Design and Patterns> <Domain-Driven Design Quickly> <Domain-Driven Design Using Naked Objects> <Implementing Domain Driven Design>等等。

领域驱动设计通过“通用语言”、“限界上下文”,“分层架构”、“实体”、“值对象” 、“聚合根”等等扩展到系统分析和架构、及具体实现上。

领域驱动设计的主要组成要素:

猜你喜欢

转载自blog.csdn.net/songzi1228/article/details/104778834