兰州网站建设流程,公司做网站自己注册域名,推荐商城网站建设,网页设计制作公司排行榜一、前言断断续续的也有在闲余时间接触领域驱动设计的相关知识#xff0c;因为目前在工作中更多的还只是一名 crud boy#xff0c;因此目前也只是对其中的某些知识点有知晓#xff0c;实际使用的比较少#xff0c;仅此而已。因此#xff0c;趁着这个春节假期#xff0c;整… 一、前言断断续续的也有在闲余时间接触领域驱动设计的相关知识因为目前在工作中更多的还只是一名 crud boy因此目前也只是对其中的某些知识点有知晓实际使用的比较少仅此而已。因此趁着这个春节假期整理了一下自己的 github 帐号同时结合自己定的学习计划以及自己的期望发展方向决定从一个真实的案例来梳理领域驱动的相关知识。本篇文章是开篇因为领域驱动设计相关的知识真的不怎么好懂如果行文中出现错误的地方欢迎大家在评论区指出先行感谢。当然talk is cheap, show me the code作为一名 .NET 开发人员实例中的服务端代码全部是基于 ASP.NET Core 框架进行搭建的。 二、系列目录我的领域驱动设计运用实例 - 领域啊领域 三、Step by Step不清楚大家在接触领域驱动的相关知识时是不是一上来就是领域驱动经典的四层架构然后什么是实体、值对象、聚合它们之间有什么异同以及与传统的开发模式又是什么领域模型又是什么东东最终接触到一大堆的概念结合上网搜到的示例项目代码结果最后就知道了几个名词。当然这些都是领域驱动设计中比较重要的知识点可能是自己入行较短按照上面的这个顺序看了一遍看完之后嗯貌似最后都没看完我只能是下面的这种表情。。。因此为了不让像我这样的小白用户一上来就用药过猛所以这里我换一种方式来尝试解释我所认为的领域驱动设计如若存在偏差希望可以帮忙指出。第一篇介绍的是我认为领域驱动设计中一个最基础的东西也是很多文章中并没有说的如何去识别出业务领域并进行划分。1、案例分析因为在识别领域时需要做到对于业务流程有比较深刻的了解至少应该做到有相关软件的使用经历因此在这个系列的文章中我选择的是项目管理软件作为文章的示例项目。最终实现的各种需求是基于禅道项目管理软件这个开源项目的因此在开发这个项目之前我们可以先看看禅道这个项目管理系统中所包含的功能模块。毕竟只有在了解需求之后才好进行下一步的工作。在这个开源的项目管理系统中主要包含了如下的几个功能。除了一些基础的权限相关功能站在项目产品的角度禅道包含了对于产品的分支、团队成员、迭代版本、功能模块、功能需求等数据信息的维护同时针对项目可以去设定各种任务、以及可以提 bug 等等任务操作。当然系统所包含的功能还可以继续往下展如果按照我们面向数据库开发的经验在弄清楚系统的各项功能后可能就是去建各种的表了继而识别出各个表之间的关联关系然后就 ctrl c、ctrl v 的开干了。当然这里既然选择采用一种新的方式进行开发忘掉我们原来的经验从一个新的角度开始。2、领域划分领域驱动设计在维基百科中对于领域的解释如下因为词条的中文解释应该是机翻的所以这里放出英文原文下方的中文是我基于个人理解所提供的翻译仅供参考。A sphere of knowledge (ontology), influence, or activity. The subject area to which the user applies a program is the domain of the software;领域是一种关于知识、影响或是活动的范围限定。软件的领域是用户想要通过使用该程序所要达到的主体功能。范围即是边界能够置于相同范围内的事物必定是具有着某种相同的特性我们通过代码的手段来解决现实中的问题时也会将某些共通的业务放到一块。因此在使用领域驱动的思想来指导软件开发的过程中我们需要按照一定的业务规则将期望达成的业务进行细分在最终划分出的一个个小业务范围内通过建立领域模型的方式指导代码实现从而解决具有共同特性的问题因此领域驱动设计中的领域就是这个业务边界范围内想要解决的业务问题域。接下来针对我们期望实现的项目管理系统就是需要按照一定的业务规则完成我们的业务领域的划分。第一步确定研究对象明确我们将要研究的业务领域识别出最终需要解决的业务问题我们最终想要实现的目标是一个项目管理系统因此这里我们的研究对象就是项目管理。第二步对研究对象按照一定的业务逻辑进行细分将领域进一步的划分成多个子领域从上面了解到的期望实现的系统功能中看出来基于各个项目管理中不同业务的特性我们可以将项目管理这个领域拆分成项目子域、版本子域、任务子域等等。第三步对识别出的子领域再次进行细化从而识别出子领域中的最小单元从而确定所需要研究的范围边界在识别出领域的各个子域之后我们需要对子域进行进一步的细化当不能再细化的时候我们就可以在这个限界上下文中去建立该子领域的领域模型从而构建出代码模型完成最终的编程开发。就像上面列出的步骤一样我们在对业务领域进行不断的拆分中会划分出不同的子域。对于业务来说某些业务很重要某些可能就无关紧要。因此在划分子领域的过程中通过子域的重要性和业务功能属性的差异我们可以将其区分成核心子域、通用子域、以及支撑子域。核心子域是我们需要解决的业务核心问题支撑子域是支撑我们的核心子域实现的业务而通用子域则更多的是每个系统中一些通用的业务功能例如认证、授权等等。因此在实现业务时我们应该将核心子域的建设摆在首位。按照上面的步骤识别出的业务领域如下图所示因为这里的领域划分更多的是我个人的想法所以会存在思考不完善的地方如果你有别的看法欢迎指出。可以看到这里其实只是识别出了比较粗放的业务子领域并没有完成对于业务最小单元的边界识别。因为这块的内容会与领域建模关联比较大所以统一放到下一篇文章中通过介绍如何用事件风暴的方式完成对于业务领域的建模时一起介绍。嗯其实就是完全没想好怎么写。。。 三、个人总结领域驱动的核心是完成对于领域模型的定义从而确定业务和应用边界保证我们的业务模型与代码模型一致性领域驱动是一种架构设计的方法论通过围绕实际业务构建领域模型的方式将复杂的业务领域逐步的拆分帮最终找出最基础的业务功能与其对应的最基础功能应用的边界领域是用来确定功能的范围范围即是边界相同的业务问题应该限制在特定的一个功能范围中。一个业务领域可以继续划分最终实现将业务域进行不断的拆解从而降低对于整体业务的理解和系统实现的复杂度 四、参考资料阿里盒马领域驱动设计实践DDD理论学习系列——案例及目录浅谈我对DDD领域驱动设计的理解