zoukankan      html  css  js  c++  java
  • 领域驱动设计之基本概念

    企业级业务系统开发我们略过需求的采集、分析,直接进入设计。

    领域驱动设计(DDD)是近10年流行、比较成熟、比较成功的软件设计方法、理论。我们早期常见的软件开发方式是拿到产品需求后,直接考虑数据库中表应该如何设计,这种方式已经将设计与业务需求脱节,而更多的是直接考虑应该如何实现了,这有点本末倒置。而DDD是从领域(问题域)为出发点进行的设计方法。

    这里先说一下领域驱动设计的概念:是一种以领域为核心的设计方法与理念。建立正确的领域模型是领域驱动设计的核心。

    我的理解:

    DDD(领域驱动设计)是一种设计方法,它是通过捕获与分析产品需求的领域概念,然后将这些领域概念设计为领域模型,领域模型从本质上反映了产品需求。通过领域模型作为指导,最终作为软件代码的依据。DDD中包含了大量成熟的方法、模式和架构,DDD这种设计方法或理论比OOD等设计方法更靠近产品的需求,也更靠近编写的软件代码。这里需要重点说明的是:

    1.产品需求!=用户需求:用户需求是用户站在自己角度描述的系统能够完成的功能,通常只能是需求分析师进行需求采集的产物,而产品需求是通过分析用户需求后形成的用户本质的需求,通常的表现形式是“需求规格说明书”或“四色原型模型”。另外领域模型应该关注的是领域核心的概念,而不应该过多的考虑将用户如何纳入领域模型中。

    2.领域模型是对某个边界上下文的领域的表示,是反映了产品需求的本质。

    3.领域模型应该包含领域的业务逻辑,这样可以提高业务的可理解、可维护、可重用。DDD一般建议领域模型为充血模型,也就是一个领域模型除了包含状态,还应该包含自身业务的行为,不应该是只包含POCO,而不包含行为的贫血模型。我个人认为不应该简单的认为应该建立贫血模型还是充血模型,而是模型应该是能够包含自身的状态,并且能够维护自身的业务规则。

    4.领域模型只考虑业务,与技术无关。我认为与技术无关只是说明领域模型关注的重点是业务,而不是技术,但是在领域建模时,还是要考虑到技术方面的实现,比如性能等。

    5.通用语言。在需求分析和设计的过程中,用户、领域专家、开发人员沟通应该采用一种通用语言。这里说的通用语言我认为主要表示两个含义,一是对领域中的一些概念应该明确,并使用这种明确的语义进行交流,二是最好在一个领域模型上进行需求与设计的讨论。但在中国好像第二种方式比较困难,一种原因是中国的用户不习惯,第二种原因是开发人员不希望用户直接看到模型。

    6.有了DDD的一些模式、架构以及领域模型后,设计可以平滑的实现为软件代码。

    7.在设计与实现的过程中,用户、领域专家、开发人员会不断交流,会对领域模型进行不断的细化、完善。另外需要注意的是,代码的实现必须要依赖于领域模型,如果有偏差,要么调整代码,要么是原来的领域模型不够完善,需要调整领域模型。

    8.领域模型是整个软件的核心,是最有价值的部分。

    欢迎加入QQ讨论群:309287205

  • 相关阅读:
    解决Shockwave flash在chrome浏览器上崩溃的问题
    Java实现平衡二叉树(AVLTree)的构建
    Netty4具体解释二:开发第一个Netty应用程序
    cocos2dx实现android的对讯飞语音的合成(语言朗读的实现)
    how tomcat works 读书笔记四 tomcat的默认连接器
    我的职业观
    学习NodeJS第一天:node.js引言
    数学之路-python计算实战(20)-机器视觉-拉普拉斯算子卷积滤波
    .net web 开发平台- 表单设计器 一(web版)
    白话经典算法系列之中的一个 冒泡排序的三种实现
  • 原文地址:https://www.cnblogs.com/malaoko/p/4992874.html
Copyright © 2011-2022 走看看