当前位置:首页 > 软件设计 > 正文内容

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

邻居的猫1个月前 (12-09)软件设计1219

一、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,有或许不是你做的事务没价值,而是自己关于事务的了解还不行深;假如总是沉迷于代码编写,或许你的开展空间就会受限了。

作者:京东科技 孙拂晓

来历:京东云开发者社区 转载请注明来历

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=335

标签: DDD架构设计
分享给朋友:

“DDD学习与感悟——总是觉得自己在CRUD怎么办?” 的相关文章

面向对象编程思想,面向对象编程思想概述

面向对象编程思想,面向对象编程思想概述

面向对象编程(ObjectOriented Programming,简称OOP)是一种编程范式,它通过对象和类来组织和表示现实世界中的实体和关系。这种编程方式将数据和操作数据的方法封装在一起,形成对象,然后通过对象之间的交互来完成各种任务。面向对象编程具有以下特点:1. 封装:封装是将数据和操作数据...

系统架构设计师含金量,系统架构设计师证书的含金量解析

系统架构设计师含金量,系统架构设计师证书的含金量解析

系统架构设计师是一个具有较高专业性和技术深度的职业角色,主要负责设计、构建和维护复杂软件系统的整体架构。这个职位的重要性体现在以下几个方面:1. 技术深度和广度:系统架构设计师需要掌握多种编程语言、框架和工具,以及相关的理论知识,如设计模式、软件工程原理等。他们还需要对不同的技术栈有深入的理解,以便...

商业模式设计步骤,商业模式设计步骤概述

商业模式设计步骤,商业模式设计步骤概述

商业模式设计是一个系统化的过程,它涉及到对市场、客户、产品、服务、渠道、成本和收入等多个方面的深入分析和规划。以下是商业模式设计的一般步骤:1. 市场研究: 分析目标市场的规模、增长潜力和竞争情况。 确定目标客户群体,了解他们的需求和偏好。2. 价值主张: 确定你的产品或服务如何满...

java设计模式有哪些,Java设计模式 软件工程 编程实践

java设计模式有哪些,Java设计模式 软件工程 编程实践

Java设计模式是面向对象软件设计的一种方法,旨在提高代码的可重用性、可维护性和可扩展性。设计模式提供了一种通用的、可重用的解决方案,来解决在软件开发中经常遇到的问题。以下是Java中常用的一些设计模式:1. 创建型模式: 单例模式(Singleton):确保一个类只有一个实例,并提供一个全局...

前端设计模式, 单例模式(Singleton)

前端设计模式, 单例模式(Singleton)

前端设计模式是软件开发中用于解决特定问题的通用、可重用的解决方案。它们帮助开发者组织代码,提高代码的可读性、可维护性和可扩展性。前端设计模式通常应用于JavaScript、HTML和CSS等前端技术栈中。1. 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供一个全局访问...

面向对象的设计模式,构建可复用、可维护的软件系统

面向对象的设计模式,构建可复用、可维护的软件系统

面向对象设计模式通常分为三大类:1. 创建型模式(Creational Patterns):对类的实例化过程进行抽象,能够将软件模块中对象的创建和对象的使用分离。为了使对象实例化的过程更加灵活,创建型模式引入了工厂、建造者、原型等概念来指导对象的创建。创建型模式包括:工厂方法模式、抽象工厂模式、单例...