花繁为简,执着至美

从数据结构到软件架构设计
查看详情

极致体验,尽善尽美

从手机端 到pc端 到H5跨平台应用
查看详情

从ui界面 到交互逻辑

不止于功能实现 更追求极致体验
查看详情

当前位置:苏州凌锐 > 资料中心 > 软件定制开发 >



软件设计方法之领域驱动设计DDD3

作者:admin日期:
< p class =“MsoNormal”&gt; &LT;跨度&GT;软件开发中的域驱动设计&lt; / span&gt; 3&lt; span&gt;(&lt; / span&gt;&lt; span&gt; DDD&lt; / span&gt;&lt; span&gt;)&lt; / span&gt; &LT; / p为H. &lt; p class =“MsoNormal”&gt; &NBSP; &LT; / p为H. &lt; h2 style =“margin-left:0.0000pt; text-indent:0.0000pt; background:#FFFFFF;”&gt; &lt; b&gt;&lt; span&gt;域模型设计&lt; / span&gt;&lt; / b&gt;&lt; b&gt;&lt; / b&gt; &LT; / H2&GT; &lt; p class =“p”style =“margin-left:0.0000pt; text-indent:0.0000pt; background:#FFFFFF;”&gt; &LT;跨度&GT;这部分,我想学习&lt; / span&gt; DDD的人非常熟悉。 DDD的原始工作中提出了许多实用的建模工具:聚合,实体,价值对象,工厂,仓储,域服务和域事件。我们可以使用这些工具为每个子域设计域模型。设计最终由域模型图促成。要使用这些工具,首先需要了解每个工具的含义和使用方案。不要以为它很简单,比如聚合分工是一种非常艺术化的生活。同一系统,由不同人设计的聚合完全不同。并且很可能主人之间最终设计的差异更大。事实上,我认为这是世界观的碰撞,呵呵。因此,对于领域建模,我认为每个人都应该学习哲学知识,这有助于我们更好地理解世界,更好地理解事物的本质。 &LT; / p为H. &lt; p class =“p”style =“margin-left:0.0000pt; text-indent:0.0000pt; background:#FFFFFF;”&gt; &LT;跨度&GT;关于概念以及如何使用这些建模工具,我没有太多话要说。这篇博客有很多介绍。让我谈谈我认为更重要的内容,比如如何对该领域进行建模?这些步骤应该是什么样的? &LT; /跨度&GT; &LT; / p为H. &lt; h3 style =“margin-left:0.0000pt; text-indent:0.0000pt; background:#FFFFFF;”&gt; &lt; b&gt;&lt; span&gt;字段建模方法&lt; / span&gt;&lt; / b&gt;&lt; b&gt;&lt; / b&gt; &LT; / H3&GT; &lt; p class =“p”style =“margin-left:0.0000pt; text-indent:0.0000pt; background:#FFFFFF;”&gt; &LT;跨度&GT;通过我上面介绍的子域的内容,现在我将谈谈如何建模域,我认为它更方便。我的主要方法是:&lt; / span&gt; &LT; / p为H. &lt; p class =“MsoNormal”style =“margin-left:30.0000pt; text-indent:-18.0000pt;”&gt; 1.&NBSP;&LT;跨度&GT;划分边界上下文。通常,每个子域(&lt; / span&gt;子域)对应于有界上下文。同一边界环境中的概念是清晰的,没有任何含糊之处; &LT; / p为H. &lt; p class =“MsoNormal”style =“margin-left:30.0000pt; text-indent:-18.0000pt;”&gt; 2.&nbsp;&lt; span&gt;在每个边界上下文中设计域模型。有许多特定的域模型设计方法,例如基于场景的&lt; / span&gt;&lt; span&gt;四色原理&lt; / span&gt;&lt; span&gt;分析;这一步的核心是找到聚合root并找出每个聚合根中包含的信息;绘制域模型图并圈出每个模型中的聚合边界; &lt; / span&gt; &LT; / p为H. &lt; p class =“MsoNormal”style =“margin-left:30.0000pt; text-indent:-18.0000pt;”&gt; 3.&NBSP;&LT;跨度&GT;在设计域模型时,请考虑域模型是否满足业务规则,还要考虑技术实现问题,如并发问题;领域模型不是概念模型,概念模型不关注技术实现。域模型关心;所以域模型可以直接指导编码实现; &LT; /跨度&GT; &LT; / p为H. &lt; p class =“MsoNormal”style =“margin-left:30.0000pt; text-indent:-18.0000pt;”&gt; 4.&nbsp;&lt; span&gt;考虑域模型在业务场景中的工作方式以及它如何适应业务流程的各个方面; &LT; /跨度&GT; &LT; / p为H. &lt; p class =“MsoNormal”style =“margin-left:30.0000pt; text-indent:-18.0000pt;”&gt; 5.&nbsp;&lt; span&gt;场景演练,以确认域模型是否可以满足域中的业务场景和业务流程; &LT; /跨度&GT; &LT; / p为H. &lt; p class =“MsoNormal”style =“margin-left:30.0000pt; text-indent:-18.0000pt;”&gt; 6.&nbsp;&lt; span&gt;该模型继续进行重构,改进和完善; &LT; /跨度&GT; &LT; / p为H. &lt; h3 style =“margin-left:0.0000pt; text-indent:0.0000pt; background:#FFFFFF;”&gt; &LT b取代;&LT;跨度&GT;域模型的核心作用:&lt; / span&gt;&lt; / b&gt;&lt; b&gt;&lt; / b&gt; &LT; / H3&GT; &lt; p class =“MsoNormal”style =“margin-left:30.0000pt; text-indent:-18.0000pt;”&gt; 1.&NBSP;&LT;跨度&GT;抽象域内的核心概念并建立概念之间的关系; &LT; /跨度&GT; &LT; / p为H. &lt; p class =“MsoNormal”style =“margin-left:30.0000pt; text-indent:-18.0000pt;”&gt; 2.&nbsp;&lt; span&gt;域模型假定维护域内的状态; &LT; /跨度&GT; &LT; / p为H. &lt; p class =“MsoNormal”style =“margin-left:30.0000pt; text-indent:-18.0000pt;”&gt; 3.&NBSP;&LT;跨度&GT;域模型维护域内数据之间的业务规则,数据一致性; &LT; /跨度&GT; &LT; / p为H. &lt; p class =“p”style =“margin-left:0.0000pt; text-indent:0.0000pt; background:#FFFFFF;”&gt; &LT;跨度&GT;下图是我最近制作了一个通用电子商务系统的商品中心的域模型地图,供您参考:&lt; / span&gt; &LT; / p为H. &lt; p class =“p”style =“margin-left:0.0000pt; text-indent:0.0000pt; background:#FFFFFF;”&gt; &NBSP; &LT; / p为H. &lt; h3 style =“margin-left:0.0000pt; text-indent:0.0000pt; background:#FFFFFF;”&gt; &lt; b&gt;&lt; span&gt;域模型设计只是软件设计的一小部分&lt; / span&gt;&lt; / b&gt;&lt; b&gt;&lt; / b&gt; &LT; / H3&GT; &lt; p class =“p”style =“margin-left:0.0000pt; text-indent:0.0000pt; background:#FFFFFF;”&gt; &LT;跨度&GT;值得注意的是,域模型设计只是整个软件设计的一小部分。除了领域模型设计之外,还有很多其他设计要做到系统,例如:&lt; / span&gt; &LT; / p为H. &lt; p class =“MsoNormal”style =“margin-left:24.0000pt; text-indent:-18.0000pt;”&gt; ·&nbsp;&lt; span&gt;容量规划&lt; / span&gt; &LT; / p为H. &lt; p class =“MsoNormal”style =“margin-left:24.0000pt; text-indent:-18.0000pt;”&gt; ·&nbsp;&lt; span&gt;建筑设计&lt; / span&gt; &LT; / p为H. &lt; p class =“MsoNormal”style =“margin-left:24.0000pt; text-indent:-18.0000pt;”&gt; ·&nbsp;&lt; span&gt;数据库设计&lt; / span&gt; &LT; / p为H. &lt; p class =“MsoNormal”style =“margin-left:24.0000pt; text-indent:-18.0000pt;”&gt; ·&nbsp;&lt; span&gt;缓存设计&lt; / span&gt; &LT; / p为H. &lt; p class =“MsoNormal”style =“margin-left:24.0000pt; text-indent:-18.0000pt;”&gt; ·&nbsp;&lt; span&gt;框架选择&lt; / span&gt; &LT; / p为H. &lt; p class =“MsoNormal”style =“margin-left:24.0000pt; text-indent:-18.0000pt;”&gt; ·&nbsp;&lt; span&gt;发布计划&lt; / span&gt; &LT; / p为H. &lt; p class =“MsoNormal”style =“margin-left:24.0000pt; text-indent:-18.0000pt;”&gt; ·&nbsp;&lt; span&gt;数据迁移,同步方案&lt; / span&gt; &LT; / p为H. &lt; p class =“MsoNormal”style =“margin-left:24.0000pt; text-indent:-18.0000pt;”&gt; ·&nbsp;&lt; span&gt;细分方案&lt; / span&gt; &LT; / p为H. &lt; p class =“MsoNormal”style =“margin-left:24.0000pt; text-indent:-18.0000pt;”&gt; ·&NBSP;&LT;跨度&GT;回滚计划&lt; / span&gt; &LT; / p为H. &lt; p class =“MsoNormal”style =“margin-left:24.0000pt; text-indent:-18.0000pt;”&gt; ·&nbsp;&lt; span&gt;高并发解决方案&lt; / span&gt; &LT; / p为H. &lt; p class =“MsoNormal”style =“margin-left:24.0000pt; text-indent:-18.0000pt;”&gt; ·&nbsp;&lt; span&gt;一致性选择&lt; / span&gt; &LT; / p为H. &lt; p class =“MsoNormal”style =“margin-left:24.0000pt; text-indent:-18.0000pt;”&gt; ·&nbsp;&lt; span&gt;高性能压力测试解决方案&lt; / span&gt; &LT; / p为H. &lt; p class =“MsoNormal”style =“margin-left:24.0000pt; text-indent:-18.0000pt;”&gt; ·&nbsp;&lt; span&gt;监控报警场景&lt; / span&gt; &LT; / p为H. &lt; p class =“p”style =“margin-left:0.0000pt; text-indent:0.0000pt; background:#FFFFFF;”&gt; &LT;跨度&GT;等等。所有这些都需要我们很多平常的学习和积累。作为一名合格的开发人员或架构师,我觉得除了DDD域的驱动器设计之外,拥有如此多的技术技能并不容易。所以,不要以为你会成为DDD,你认为自己很好,事实上,你只会是软件设计中的冰山一角。 &LT; / p为H. &lt; h2 style =“margin-left:0.0000pt; text-indent:0.0000pt; background:#FFFFFF;”&gt; &LT b取代;&LT;跨度&GT;总结&LT; /跨度&GT;&LT; / B&GT;&LT b取代;&LT; / B个 &LT; / H2&GT; &lt; p class =“p”style =“margin-left:0.0000pt; text-indent:0.0000pt; background:#FFFFFF;”&gt; &lt; span&本文的重点是基于我对&lt; / span&gt; DDD的个人理解,希望能够理清我总结并与您分享的一些见解和经验。我相信很多people在DDD书上看到太多东西。我总觉得这本书上的内容似乎过于“规律”。很多时候,阅读之后很难消化,即使我理解了书中的内容,当我们想把它应用到实践中时,我们总觉得我们无法开始。本文希望通过易于理解的文本介绍我对DDD的一些理解和实践经验,希望能给你一些启发和帮助。 &LT; / p为H. &lt; p class =“MsoNormal”&gt; &NBSP; &LT; / p为H.

本文标签:
极力推荐
  • 软件开发实力派

  • 国家高新技术企业培育入库 江苏省民营科技企业 中小型科技企业,软著40+ 商标10+专利2 ;软件开发实力派linqwen 苏州市凌锐信息科技有限公司
  • 软件开发中的领域驱动设计(DDD)

  • DDD的全称为Domain-driven Design,即领域驱动设计。下面我从领域、问题域、领域模型、设计、驱动这几个词语的含义和联系的角度去阐述DDD是如何融入到我们平时的软件开发初期阶段的。要
  • 你是招人开发小程序还是找外包软件公司

  • 在当今流行小程序的时代,微信小程序已经成为企业营销的标准配置。企业应该招聘员工开发小程序还是找一家外包软件公司?小编告诉你,无论你是在寻找一家外包公司来发展还是建