重新解读DDD领域驱动设计(一)

回顾

十年前,还未踏入某校时,便听闻某学长一毕业就入职北京某公司,月薪过万。对于一个名不见经传的小学院,一毕业能拿到这个薪水还是非常厉害的。听闻他学生期间参与开发了一款股票软件,股票那时正迎来一波疯涨。时也运也。我那时心里就想,只会软件也行不通吧,至少要熟悉股票规则。在还未踏入编程大门时,我就清楚的认识了软件服务于业务的本质。

      等刚开始工作时,从事些较简单的工作,也是需要和使用人员讨论需求,文档编写和开发实现。性质偏向于公司内部财务人员或业务人员管理用的子系统。也许厌烦了写的代码用的人太少,于是转移到了互联网类型的公司。在日益复杂的业务与软件规模下,以前用的熟练的三板斧渐渐适应不了,知识库需要更新了。结合以前的工作实践,按自己的理解,重新解读下领域驱动设计。

第一部分  运用领域模型

按照一个系统的开发步骤,除了前期招标,合同,预算,人员规划等其他项目管理的范畴外,真正执行到系统部分是从沟通业务需求开始的。

第一章 消化知识

几年前我们要做一个院系资产管理系统,最开始理解的有人申请,管理员审核购买,分发扣库存的逻辑。实际讨论下来之后,分为很多流程。如设备提申请,教务处审批,院系审批,提交财务核账。又涉及到固定资产折旧,退货流程,又要财务核对。又有家具的申请与退货等其他。还有定期的报表功能。基于我们开发人员和校方人员,都对资产审核,退货,对账流程都有一定熟悉度,所以沟通下来业务大框架还算顺利。我理解为我们在沟通业务的过程中,有了相似的认识,并在磨合过程中,修炼完善。DDD一书中,以PCB电路板软件工具为开篇,讲述了PCB专家和开发人员沟通中从最开始的很难沟通,到最后依据流程图及PCB元件执行逻辑完成了语言上的沟通统一。很幸运,我们大部分的业务并没有如文中跨度那么大。

在沟通的过程中,业务专家需要理解共同构建的业务模型,开发人员也要依据业务模型来勾思大概实现逻辑。就比如设备申请,家具申请,XX申请;设备退货,资产退货。这些有共同性,又有差异的流程,如何更好的抽象,来实现复用?如果单纯开发人员自己抽象得到概念有可能是很幼稚的,开发出来的软件只能做基本工作,无法充分反映领域专家的思考方式。

领域专家和开发人员共同参与,一起来丰富抽象的模型。提炼模型,对于领域专家来说也是升华自己思考完善自己理解的过程。会更加注重概念的严谨性。

模型在不断改进的同时,也称为组织项目信息的工具。模型聚焦于需求分析。它与编程和设计紧密交互。

知识丰富的设计

举一个判断是否合并账号的逻辑。一个请求中的手机,邮箱账号,根据账号的是否验证,以及数据库中手机号邮箱的是否存在是否验证来判断是否合并账号。产品列举了81条合并规则。

我最开始想到了策略设计模式。根据各种状态分析出主要的几个策略来实现判断。工作量相当复杂,而且易出错。同事建议了另外一种规则式的实践。对比新账号的状态和筛选中的存在账号状态,形成一个规则,看这个规则符合那81条规则的哪一种。这样代码量指数级下降,也通用。而且其他人也更容易根据产品的文档,直接看懂代码。模型与实现一致。

书中依据航线超卖为例,举了两个例子,一个是简单的if超卖判断,一个把超卖独立成一个策略类来判断超卖。并强调超卖在模型中不仅仅是一个简单的判断,而是一个让所有人看到代码都明白是一个独特的策略。

经过以上对比,你会发现设计模式有它自己的适用场景,不要随便套用。第二点设计的模型和代码实现一致。

深层模型

说到太极,外是软绵绵的一套动作。如果按软件直接开发,实现出来的是错的。因为陈家沟的领域专家们会告诉你太极每一招都是制人招。这个我信,如果有人喂招的话,分秒钟被干到地,对付普通人还是有效的。

这里说的后续的制人招是深层模型,我们看到的慢腾腾的动作是表层。这样说很容易理解。

第二章 交流与语言的使用

通用语言

领域专家和开发人员语言要一致。将模型作为语言的支柱。确保团队在内部的所有交流中以及代码中坚持使用这种语言。

书面设计文档

文档应作为代码和口头交流的补充

文档和图

用图来沟通交流,能促进头脑风暴。但模型不是图。            

本篇文章主要是应用自己亲身经历的案例来重新解读领域驱动。

本篇结束,谢谢观看。

原文地址:https://www.cnblogs.com/fancunwei/p/9535982.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 

640?wx_fmt=jpeg


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317065.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序员修神之路--高并发优雅的做限流(有福利)

点击上方蓝色字体,关注我们菜菜哥,有时间吗?YY妹,什么事?我最近的任务是做个小的秒杀活动,我怕把后端接口压垮,X总说这可关系到公司的存亡简单呀,你就做个限流呗这个没做过呀&#x…

免费馅饼 HDU - 1176

免费馅饼 HDU - 1176 题意: 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼。说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的10米范围内。馅饼如果掉在了地上…

微软 HoloLens 2 正式登场!让你看看什么叫真正的黑科技

北京时间 2 月 25 日凌晨消息,微软在 MWC19 举行新品发布会,正式发布了万众期待的 HoloLens 2 等产品。▲ 认识全新的 Microsoft HoloLens 2微软 HoloLens 全息眼镜是微软推出的一款头戴式混合现实装置,可以完全独立使用,无需线缆…

洛谷P6054:开门大吉

Description\text{Description}Description P6054 开门大吉 nnn 位选手去参加节目“开门大吉”。共有 mmm 套题,每套题包含 ppp 个题目,第 iii 位选手答对第 jjj 套题中第 kkk 道的概率为 fi,j,kf_{i,j,k}fi,j,k​。 若一位选手答对第 iii 题&#xff0…

Docker最全教程之Ubuntu下安装Docker(十五)

前言Ubuntu是一个以桌面应用为主的开源GNU/Linux操作系统,应用很广。本篇主要讲述Ubuntu下使用SSH远程登录并安装Docker,并且提供了Docker安装的两种方式,希望对大家有所帮助。拥抱Linux,大家可以从Ubuntu开始!Ubuntu下…

潘淳(寒树Office):不务正业的公众号满月了,都写了些啥?

三喜临门一 喜今天真是个好日子,“流浪太阳”又回来了,阴雨绵绵长恨无期,今天苏州终于天晴,于是心情大好!都说好心情会带来好运气,冥冥感觉要写点啥了,果不其然今天还有另外两喜。大早起来得…

G List it all

传送 题意: 题解: 我们来考虑以下样例:1,1,2 我们先考虑1的贡献:如图(图中只花了) 2!表示还剩两个空位,还有两个数未填入,所以是2!个 对于n个数重复&#x…

ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法

一、前言在非静态页面的项目开发中,必定会涉及到对于数据库的访问,最开始呢,我们使用 Ado.Net,通过编写 SQL 帮助类帮我们实现对于数据库的快速访问,后来,ORM(Object Relational Mapping&#x…

微软发布 Visual Studio 2019年第二季度路线图

微软近日发布了 Visual Studio 2019 年第二季度的路线图,路线图介绍了目前 VS 致力于在 VS 2019 发布的一些重要功能。官方表示,Visual Studio 2019 将继续按照 Visual Studio 发行周期流程提供更新,也就是约每 6 周推出一次次要更新&#xf…

李争——一个骨子里是极客的程序员

我的业余作品《IT 英雄传》,聚焦身边的英雄,以文字采访的形式记录奇人趣事,笑看风云变幻。所写的人都是我见过面且比较熟悉的,绝大部分都是交往很久的,其中为了避嫌,我很少写微软同事,但今天这一…

仅此一文让你明白事务隔离级别、脏读、不可重复读、幻读

网络上关于这方面的博文有些偏理论,有些通篇代码,都不能深入浅出。本文用图文并茂的方式,配上行云流水般的代码,非要摆清楚这个问题。相关代码已提交至码云(点击这里下载)。事务是现代关系型数据库的核心之…

2.5:模拟总结

文章目录前言考场题目解析T1T2T3总结代码T1T2T3前言 50pts 30020 rnk19 … 把1000ms看成10s我也真是个人才。 T3自然溢出50带模数T成20有点离谱。 但倒没有因为WA失分。 就是菜罢了 考场 这次时间管理还是比较合理的。 乍看三题觉得T1似乎是个伞兵题 这离线下来可持久化数组…

Meeting HDU - 5521

Meeting HDU - 5521 题意: 一共有n个点,有m个块,每个块内有Si个点,块内点彼此到达费用为wi,两个人分别位于1和n号块,两者同时出发问最短时间遇到是多少?在哪些地方可以遇到? ΣSi&…

牛客IOI周赛26-提高组(逆序对,对序列,未曾设想的道路) 题解

文章目录逆序对对序列未曾设想的道路牛客IOI周赛26-提高组逆序对 这种套路之前已经见过几次了,肯定不是模拟操作数列 opt 1 对于i∈[1,l)⋃(r,n]i∈[1,l)\bigcup(r,n]i∈[1,l)⋃(r,n] 逆序对是不影响的 对于i∈(l,r)i∈(l,r)i∈(l,r) 与l/rl/rl/r的情况会反转&…

Frogs HDU - 5514

Frogs HDU - 5514 题意: 有n个青蛙,第 i 个青蛙每次只能够跳 ai​步,现在有m个石头围成一圈,编号为0到m−1,现在青蛙可以围着这个石头组成的圆跳无限次,每跳一次就会占领这个石头,可以无限占领…

Docker最全教程之树莓派和Docker(十六)

前言树莓派(Raspberry Pi)是一台卡片电脑(只有信用卡大小),我们可以使用树莓派做很多事情,比如智能家居的中控、航空器、BT下载器、挖矿机、智能机器人、小型服务器(花生壳网站)等等…

【NET CORE微服务一条龙应用】第三章 认证授权与动态权限配置

介绍系列目录:【NET CORE微服务一条龙应用】开始篇与目录在微服务的应用中,统一的认证授权是必不可少的组件,本文将介绍微服务中网关和子服务如何使用统一的权限认证主要介绍内容为:1、子服务如何实现和网关相同的鉴权方式2、接口…

WebApiClient与Asp.net core DI的结合

1 WebApiClient一款基于HttpClient封装,只需要定义c#接口并修饰相关特性,即可异步调用远程http接口的客户端库WebApiClientWebApiClient.ExtensionsWebApiClient.Tools2 Http接口的注册与提供2.1 声明远程端http接口public interface IBaiduApi : IHttpA…

梁迪:源于热爱乐于分享,MVP代表圆桌会议

梁迪《MVP代表圆桌会议》MVP代表圆桌会议,源于热爱乐于分享。来自全国的MVP(周岳、苏震巍、蒋金楠、胡浩、卿毅、项斌、刘浩杨、施兆熊、方洁影、方骥、刘鑫、童广林)作经验交流。梁 迪微软最有价值专家(MVP)项目大…

基于xlua和mvvm的unity框架

1、框架简介这两天在Github上发现了xlua的作者车雄生前辈开源的一个框架—XUUI,于是下载下来学习了一下。XUUI基于xlua,又借鉴了mvvm的设计概念。xlua是目前很火的unity热更方案,不仅支持纯lua脚本热更,也可以做 C# 代码的bug hot…