前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >领域驱动设计之基本概念

领域驱动设计之基本概念

作者头像
用户1910585
发布2018-05-04 18:01:49
1.7K0
发布2018-05-04 18:01:49
举报

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

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

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

我的理解:

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

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

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

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

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

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

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

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-11-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档