DDD(Domain-Driven Design)与传统的OOA/D(Object-Oriented Analysis and Design)有以下几个不同点:
通过DDD分析业务的流程和OOA/D的流程有什么区别?
DDD强调对业务领域进行抽象和建模,将复杂的业务逻辑划分为多个子域(Sub-Domain),然后针对每一个子域去设计相应的领域模型。而传统的OOA/D则更加注重对整个系统的分析与设计。
在DDD中,定义通用语言(Ubiquitous Language)是非常重要的一步,在此过程中,开发人员必须积极与业务专家沟通,并将其理解的业务术语和规则与代码实现相对应。而传统的OOD则更多地关注于对象、类、数据等方面的建模。
在DDD中,领域模型是核心,程序员需要将领域模型转换成代码实现,保证代码和领域模型的一致性。而在传统的OOD中,程序员需要根据分析模型进行相应的编程实现。
在DDD中,领域模型是代码实现的主导方向,程序员和业务专家共享领域模型,这样可以有效地避免因为业务专家和程序员语言不通而导致的需求理解不清的问题。而传统的OOA/D中,分析模型和设计模型是主导方向。
总之,DDD注重业务领域本身,强调从实际业务出发进行领域建模和通用语言的建立,将领域模型和代码实现保持一致性;而传统的OOA/D则更加侧重于对系统的架构、数据的组织等技术层面的考虑。
最后
从个人的实际应用场景,其实从传统的面向对象转到DDD有很大的学习成本,而且对于DDD来说需要对业务的理解有一定的深度和抽象能力。比如spring的mvc三层转到DDD的写法和用法,可能100家公司有101种理解和拆分方法,而且DDD有很多新的概念,当然也不是说DDD不好,要看实际场景,比如用DDD来拆分业务和分析业务,边界是一个很不错的一种工具。当然一切还是需要从实际出发~没有好坏,只有适不适合~