我是2012年开始接触DDD的,后续研读过几遍《领域驱动设计:软件核心复杂性应对之道》,也用DDD做过项目。总的感受是DDD的一些概念比较晦涩难懂,很难掌握,因此想写个系列短文,希望能帮助大家更轻松地理解DDD。文章很多都是我个人体会和理解,难免有错误,希望大家能及时指正,共同探讨提高。前面短文链接:
轻松学DDD之一:模型驱动设计
本文是系列短文第二篇,介绍如何高效消化知识。
在讲如何消化知识前,我们要明确下建模的知识来源有哪些。首先我们通过下图来考察模型、领域、软件、现实世界、计算机系统等几个概念的关联。
从上面的认知我们可以知道模型就是在用户目标和软件实现技术的约束下对领域知识的精确化、结构化和抽象。
由于建模依赖于在用户目标和软件实现技术约束下的领域知识梳理,因此建模就要求领域专家、建模专家和软件开发之间通过高效地沟通协作来有效地消化领域知识。下面我们从沟通媒介、沟通形式和目标三个方面来展开说明如何做到这一点。
消化知识的沟通媒介可以是多种多样,下面是几种主要的沟通媒介:
有了沟通手段,我们还需要沟通形式,下面是一些主要的沟通形式:
知识消化的最终目标无疑是构建良好的模型,但是构建良好的模型需要通过统一语言和精炼模型来支撑。
统一语言是指团队所有成员用统一的术语来指代领域概念和知识,它有如下几方面:
我们知道简单合理的软件设计是软件在长期的开发过程中能够保持低成本修改的关键。在DDD中,领域模型的复杂度决定了软件设计的复杂度,因此模型精炼就是我们消化领域知识的最重要的目标。也就是说我们消化领域知识的目标不是为了理解全部的领域知识;而是为了明确对于实现用户需求而言,哪些领域知识是重要的,哪些是不重要的。模型精炼是一个持续的过程。随着我们对于领域理解的不断深入,模型会持续精炼。随着需求的不断变化,模型关注的最重要的概念也会不断添加和删除。
消化知识是如此之难,因此保证这些知识的平稳传承就很重要。尽管这些知识会沉淀在我们的文档、UML和代码等各种物质载体之中,但是它们最重要的载体还是团队中深刻理解了这些知识的核心骨干,因此在软件开发过程中保证这些核心骨干的相对稳定才能保证知识的有效传承,才能最终保证DDD的成功。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。