领域驱动设计之基本概念

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

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

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

我的理解:

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

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

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

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

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

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

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

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏挖掘大数据

大数据分析步骤:十大步骤帮你有效使用预测分析算法

一个成功的预测分析项目不仅仅涉及软件部署,使用软件分析数据。越来越多的企业开始使用预测分析算法。了解下面这些步骤可以帮助你为分析项目打下坚实基础。

2285
来自专栏AI科技大本营的专栏

用产品的心态写代码:什么样的机器学习产品是最符合用户需求的

编译 | AI 科技大本营 参与 | 林椿眄 校对 | Leo 机器学习 (ML) 和人工智能 (AI) 是当今社会的热门话题。所以,最近有很多产品经理及那些有...

3566
来自专栏Material Design组件

About Face 4 第三章(上)为用户建模:人物模型和目标

3188
来自专栏BestSDK

大数据解密用户画像,为何老用户利润贡献是新用户的16倍?

大家经常听到一个词,叫做“画像”,结合具体对象就是:“用户画像”、“商品画像”、“产品画像”、“资产画像”……特别是大数据时代下,在实际企业中,利用大数据进行“...

3115
来自专栏云计算D1net

在云端开展深度学习正逢其时

如今,机器学习仍然很流行,而其子集深度学习可能会为企业带来更多的价值。 ? 云计算技术盛会AWS re:Invent 2017即将开幕,人们开始预测AWS公司...

3396
来自专栏理论坞

一个关于旅行的app界面设计

可能大家认为我偷懒了!其实,我想说一下:对,我是偷懒了,确实是偷懒了,每天发一些插画,真的太偷懒了,因为最近在准备一些事情,每天还在上班,时间上不太够用,没办法...

953
来自专栏大数据文摘

快去注册!吴恩达新书《机器学习思维》免费预定开启

1475
来自专栏华章科技

R vs Python:R是现在最好的数据科学语言吗

Sharp Sight Labs 近日在 r-bloggers 上发表了一篇文章,论述了为什么当今的数据科学工作者应该学习 R 语言的原因。为了给大家提供一个明...

1015
来自专栏专知

十大成长性人工智能技术!

为加强对新一代人工智能技术的前瞻预判,把握全球技术创新动态及发展趋势,中国电子学会近期走访人工智能相关企业及高校院所专家,遴选发布了十项最具特色的成长性技术,...

1362
来自专栏新智元

追踪报道:谷歌 TPU 处理器实现 4 大机器学习突破

【新智元导读】谷歌的论文《数据中心的 TPU 性能分析》(In-Datacenter Performance Analysis of a Tensor Proc...

3384

扫码关注云+社区

领取腾讯云代金券