DDD学习与感悟——总是觉得自己在CRUD怎么办?

这篇具有很好参考价值的文章主要介绍了DDD学习与感悟——总是觉得自己在CRUD怎么办?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、DDD是什么?

DDD全名叫做Domins drives Design;领域驱动设计。再说的通俗一点就是:通过领域建模的方式来实现软件设计。

问题来了:什么是软件设计?为什么要进行软件设计?

软件开发最主要的目的就是:解决一个问题(业务)而产生的一个交付物(系统)。而软件设计旨在高效的实现复杂项目软件。也就是说软件设计是从业务到系统之间的桥梁。

而DDD则是在复杂业务场景下一种更高效更合理的软件设计思维方式和方法论。

二、以前的软件设计思维是什么?

绝大部分从事软件开发的人,不管是在学校还是刚开始工作,都是从ER图开始。即直接通过业务设计数据库模型和数据关联关系。这种思维根深蒂固的印在了这些人的头脑里(包括我自己)。因此在软件设计过程中习惯性的直接将业务转化为数据模型,面向数据开发。也就是我们所说的CRUD。我们有时候也会看到一些博客看到或者听到一些同事在说:这个业务有什么难的,不就是CRUD么?

不可否认的是,在软件生命周期初期,通过CRUD这种方式我们可以快速的实现业务规则,交付项目。然而一个系统的生命周期是很长的并且维护阶段的生命周期占绝大部分比例。 随着业务的发展,业务规则越来越复杂,通过CRUD这种粗暴方式,让工程代码越来越复杂,通常一个方法可能会出现几百甚至上千行代码,各种胶水代码和业务逻辑混合在一起,导致很难理解。

这种系统交接给另一个同学或者新进来的同学后,可能需要花费很长的时间才能理解这个方法,原因就是因为这种胶水代码淹没了业务核心规则。所以在现实场景中,我们经常会听到,上一个开发是SB,或者自嘲自己是在屎山上面继续堆屎。

三、DDD思想下的软件设计

DDD的思想是基于领域模型来实现软件设计。那么,什么是领域模型?领域模型怎么得来呢?

DDD思想,将软件的复杂程度提前到了设计阶段。基于DDD思想,我们的设计方式完全变了。

统一语言

首先,将业务方、领域专家以及相关的产研人员都聚拢在一起,共同探讨出业务场景和要解决的问题,统一语言。来确保所有人对于业务的理解都是一致的。

这里的统一语言不是指某种具体的技术语言,而是一种业务规则语言。所有人必须要能够理解这种统一语言。

战略设计

其次,我们根据待解决的问题空间,进行战略设计。所谓的战略设计就是根据问题空间在宏观层面识别出限界上下文。比如说一个电商业务,我们需要交付一个电商系统,根据电商业务的特点,需要划分出用户、商品、订单、仓储等限界上下文,每一个限界上下文都是一个独立的业务单元,具有完整的业务规则。

识别领域模型

然后,再分别针对上下文内的业务领域进行建模,得到领域模型。在DDD思想中,领域模型中通常包含实体、值对象、事件、领域服务等概念。我们可以通过“事件风暴”的方式来识别出这些概念。

注意,“事件风暴”和“头脑风暴”是有区别的。“头脑风暴”的主要目的是通过发散思维进行创新,而“事件风暴”是DDD中的概念,其主要目的是所有人一起根据统一语言和业务规则识别出事件。再根据事件识别出实体、值对象、领域服务、指令、业务流等领域模型中的概念。

所谓事件指的是已经发生了的事情。比如用户下了一个订单、用户取消了订单、用户支付了订单等

根据事件,我们可以识别出实体,比如上面这个例子中的订单实体,以及指令:取消、支付、下单等。

程序设计

识别出领域模型之后,我们就可以根据领域模型来指导我们进行程序设计了。这里的程序设计包括业务架构、数据架构、核心业务流程、系统架构、部署架构等。需要注意的是,在进行程序设计时,我们依然要遵循DDD中的设计规范。否则很容易走偏方向。

编写代码

有了完整的程序设计之后,我们就可以进行实际的工程搭建以及代码编写了。

这个阶段需要注意的是,我们需要遵循DDD思想中的架构设计和代码设计。实际上这个阶段也是非常困难的。因为基于DDD思想下的工程架构和我们传统的工程架构不一样。

基于DDD思想下,编码过程中我们经常会遇到的一个问题是:这个代码应该放在哪里合适。

工程结构

在DDD中,标准的工程结构分为4层。用户接口层、应用层、领域层和基础设施层。

DDD中,构建软件结构思维有六边形架构、CQRS架构等,它们是一种思想,是从逻辑层面对工程结构进行划分,而我们熟知的SOA架构以及微服务架构是从物理逻辑层面对工程结构进行划分,它们有着本质的区别,但是目标都是一样的:构建可维护、可扩展、可测试的软件系统。

代码编写

在DDD中,最为复杂的便是领域层,所有的业务逻辑和规则都在这里实现。因此我们经常会遇到一个问题就是代码应该放在哪里。

在具体落地过程中会遇到这些问题,解决这些问题没有银弹,因为不同的业务有不同的处理方式,这个时候我们需要与领域专家们讨论,得出大家都满意的处理方案。

代码重构

没有不变的业务。因此我们需要结合业务的发展而不断迭代更新我们的领域模型,通过重构的方式来挖掘隐形概念,再根据这些隐形概念去不断的调整我们的战略设计以及领域模型。使得整个软件系统的发展也是螺旋式迭代更新的过程。

通过以上的介绍,我们实现DDD的过程如下:

四、总结

通过对于DDD的理解,其实不难发现,程序员的工作重心变了,程序员其实不是在编写代码,而是在不断的摸索业务领域知识,尤其是复杂业务。

所以如果总是觉得自己在CRUD,有可能不是你做的业务没价值,而是自己对于业务的理解还不够深;如果总是沉迷于代码编写,可能你的发展空间就会受限了。

作者:京东科技 孙黎明

来源:京东云开发者社区 转载请注明来源文章来源地址https://www.toymoban.com/news/detail-748102.html

到了这里,关于DDD学习与感悟——总是觉得自己在CRUD怎么办?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • iPhone手机锁屏后总是断开WiFi怎么办?

    iPhone手机锁屏后总是断开WiFi怎么办?

    很多小伙伴反馈iPhone手机锁屏后自动断开WiFi,遇到这种情况该怎么办呢? 不用担心。小编将给大家介绍下苹果手机锁屏后断开WiFi这个问题的解决办法。让我们一起来看看吧! 首先查看你的手机是否安装了万能钥匙这类软件,如果是的话,卸载该应用就好了。 进入设置,点

    2024年02月09日
    浏览(11)
  • 耳朵总是听到嗡嗡的声音 这是为什么 该怎么办

    耳朵总是听到嗡嗡的声音 这是为什么 该怎么办

    为什么会莫名听到嗡嗡的声音,这是什么因素导致的,吃什么药能缓解? 耳鸣,是一种缺乏外部声源情况下,耳内或颅内出现的嗡嗡、嘶鸣、车笛、喇叭等不成形的异常声幻觉。这种情况可能是一种声音,也可能是多种声音混合出现,当出现的时候往往会持续一段时间。 耳

    2023年04月17日
    浏览(19)
  • 女朋友说总是记不住Git命令,怎么办?安排!

    女朋友说总是记不住Git命令,怎么办?安排!

    如果你也和我女朋友一样总是忘记Git命令,觉得记忆Git命令是很枯燥和麻烦的事情。我写了一个 包含了40 条常用Git命令的清单 。你一定要收藏起来,当你忘记Git命令的时候,就可以打开来查看啦!!! directory 目录是可选的。如果没有指定,默认使用 当前目录 。 如果要添加

    2024年02月02日
    浏览(12)
  • 夏天无线路由器总是掉线该怎么办?让无线路由器不在掉线的技巧

    大夏天的,天太热了我的路由终于支持不住了,老是掉线。下面的方法也试用于个位动手能强的朋友哦。亲们可以来试试呀很好玩的用着也很稳定。 1、我们来先把电源适配器该拆了外壳就不要用了,太大占地方不说也是涉及到散热不好。 2、我们来把我们的无线路由器也拆了

    2024年02月08日
    浏览(11)
  • 【图文教程】笔记本总是自动关机怎么办?win11自动关机问题解决方案

    【图文教程】笔记本总是自动关机怎么办?win11自动关机问题解决方案

    日常使用,代码、文档使用。 系统:win11、win10、win8、win7笔记本都可通用 笔记本:联想ThinkPad E450 笔记本相关性能参数 设备名称 XXX 处理器 Inte l® Core™ i3-8145U CPU @ 2.10GHz 2.30 GHz 机带 RAM 8.00 GB (7.85 GB 可用) 设备 ID 696EBAB8-5238-492A-8A2D-AD2A54B4A790 产品 ID 00331-10000-00001-AA054 系统类型

    2024年02月09日
    浏览(10)
  • 清华源conda安装PyTorch的GPU版本总是下载CPU版本安装包怎么办

    清华源conda安装PyTorch的GPU版本总是下载CPU版本安装包怎么办

    如下图,我用的python是3.8版本,想要下载pytorch的cuda=11.7版本的GPU环境,但是输入以下命令之后总是显示下载cpu版本的安装包。  解决办法:先把cpu版本的工具包下载下来,然后通过本地安装用GPU版本替换cpu版本。 在Proceed([y]/n)?后面输入y敲击回车下载安装cpu版本。  done说明下

    2024年02月12日
    浏览(12)
  • wifi信号太多影响自己家的wifi不稳定该怎么办?

    周围的wifi太多,影响自己路由器信息怎么办,通过该方法可以让你的路由器避免其它wifi影响信息满满 1、附近的wifi太多,影响自己的无线上网设备接收自己路由器信息怎么办 2、打开浏览器输入路由器地址(一般是192.168.0.1或192.168.1.1) 3、如果有路由器有密码输入路由器密码

    2024年02月08日
    浏览(11)
  • 电脑软件:office文档密码了怎么办,看完你就能自己找回了

    电脑软件:office文档密码了怎么办,看完你就能自己找回了

    Word、Excel、PPT作为大家日常办公的使用最频繁的办公软件。对于一些涉及个人隐私或者涉及企业机密性的文档文件,我们经常会给自己的文档加上密码。 但有时候文档时间比较久了、或者密码太多了,有时候我们会把文档的密码给忘记了,如果密码忘记了怎么办,能找回来吗

    2024年02月08日
    浏览(13)
  • 编程学习感觉困难怎么办?

    当你感觉编程学习困难时,以下是一些可以帮助你的建议: 1. 保持积极心态: 编程是一项复杂的技能,学习过程中可能会遇到挑战。 重要的是保持积极的心态,相信自己能够克服困难并取得进步。 2. 分解问题: 有时候一个看似复杂的编程问题可以被分解为更小、更容易解

    2024年02月08日
    浏览(10)
  • [经验] 电脑怎么开不了机了怎么办,一直显示完成配置 #媒体#学习方法

    电脑怎么开不了机了怎么办,一直显示完成配置 1、电脑怎么开不了机 电脑怎么开不了机 对于许多人来说,电脑是生活和工作的重要组成部分。然而,有时电脑可能会出现无法启动的问题。这可能由各种各样的原因引起,包括软件或硬件问题。在本文中,我们将讨论一些最常

    2024年02月20日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包