DDD的目的
最近看了一点Domain Driven Design这本书,虽然里面对于如何使用Entity、Value Object、Repository、Factory、Aggregated、Service等模式做了大量讲解,但是不要忘了,最终的目的是ubiquitous language。
目前大多数的商业软件或者是网站,核心复杂度并不在技术方面。特别是在Web 2.0、RIA、HTML5盛行的今天,可以说Web的架构已经不是开发网站的最大挑战了。更多的挑战来源于对业务(business)的理解。开发人员只有充分理解的业务知识,才能理解需求,才能正确的实现需求,甚至审视需求的合理性和正确性。那么开发人员如何才能获取业务知识呢?和客户谈框架?和客户谈数据库?显然大多数的客户并不理解开发人员的语言,而开发人员也通常不理解客户的语言,巴别塔的传说在现实中一次次的上演。 开发人员在与客户交流的时候,要尽量忘记技术语言,虚心学习业务语言,与客户一起寻找能够共同理解和交流的词汇集,并慢慢的形成ubiquitous language。
不仅在与客户交流的时候需要用到ubiquitous language,在开发人员之间交流和讨论业务需求的时候,也尽量要使用ubiquitous language。这使得开发人员可以保持以业务的思维方式进行思考,同时避免开发人员对业务理解的不一致。
最后,在写代码的时候,也需要用到ubiquitous language。当你用业务词汇命名类、变量和方法时,代码本身就变成了对业务的陈述, 代码本身就足以表达需求和业务,代码也就自然而然的成为更新最及时、最最真实的文档。代码即文档,是我所追求的目标,然而实现起来往往困难重重。首先,你需要知道什么样的代码是好代码(推荐《Clean Code》),什么样的设计是好的设计;然后,你还要在保持代码干净的前提下,尽量将业务规则表达出来;最后,在一个多人团队中,还要处理人员水平不同,代码质量差异的现实问题。如果代码写的不好,起不到文档的作用,最后的结果往往是业务规则的丢失:代码工作正常,功能没问题,但是没人说的清楚业务规则到底是什么,从代码中也很难看出来。
ubiquitous language是DDD的目的,需要在项目的各个阶段和环节贯彻。在与客户交流时需要使用,在开发人员之间交流时需要使用,在代码中也需要使用。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述