DDD设计
文章平均质量分 76
小杨同学~
我为成功而来,不为失败低头
展开
-
常见的企业架构图
技术企业架构图:揭示企业技术基础设施的蓝图业务流程架构图:优化企业运营的关键数据架构图:如何管理和分析企业数据应用架构图:构建企业级应用的指南企业架构图的演变:从传统到现代的转变云计算与企业架构图:如何有效利用云资源企业架构图与数字化转型:共同迈向未来安全性在企业架构图中的作用:保护企业免受威胁企业架构图与业务战略:如何实现目标企业架构图的五个核心组成部分:构建稳健企业原创 2024-02-28 15:55:17 · 203 阅读 · 0 评论 -
领域驱动设计DDD与Hexagonal, Onion, Clean, CQRS 落地
DDD, Hexagonal, Onion, Clean, CQRS 整合系统的基本模块我首先回顾了EBI和Ports & Adapters架构。它们都显式分离了应用程序内部的代码、外部的代码以及用于连接内部和外部代码的内容。此外Ports & Adapters架构明确标识了系统中的三个基本代码块:是什么使运行用户界面成为可能,无论它是什么类型的用户界面;系统业务逻辑,或应用程序核心,由用户界面用来实际实现事情;基础架构代码,将我们的应用程序核心连接到数据库、搜索引擎或第三方原创 2022-01-03 22:07:05 · 236 阅读 · 0 评论 -
DDD 驱动领域设计 学习全路径
软件发展史架构演进史之整体式架构架构演进史之分层架构架构演进史之EBI 架构架构演进史之MVC 及其替代方案DDD 驱动领域设计什么是领域驱动设计领域对象DDD驱动领域设计之实体DDD领域驱动设计之值对象DDD驱动领域设计之聚合根DDD驱动领域设计之服务领域生命周期DDD驱动领域设计之工厂DDD驱动领域设计之数据仓设计模式从贫血模型到领域驱动设计...原创 2021-12-17 09:24:25 · 203 阅读 · 0 评论 -
从贫血模型到领域驱动设计
从贫血模型到领域驱动设计贫血模型在编程领域有一个十分著名的公式:程序 = 数据结构 + 算法在面向对象编程的世界中,将现实世界中事物抽象为对应的类,数据结构对应着承载业务数据的各种类的字段,比如一个人可能就抽象为 Person 类,人具有年龄,身高等属性,抽象为Person 类的 age , height 等字段。而算法则对应业务需求的驱动引起的数据变化的过程和方式,比如要表示一个人长高了 10cm ,则可以给 Person 类设计一个 grow(int height) 方法来表示“长高”这一动原创 2021-12-16 15:05:32 · 136 阅读 · 0 评论 -
DDD驱动领域设计之数据仓
DDD领域驱动设计中最重要的环节,数据仓原创 2021-12-15 09:20:59 · 328 阅读 · 0 评论 -
DDD驱动领域设计之工厂
Factory书接上文DDD驱动领域设计之Aggregate,当创建一个对象或创建整个AGGREGATE时,如果创建工作很复杂,或者暴露了过多的内部结构,则可以使用FACTORY进行封装。FACTORY有很多种设计方式。[Gamma et al. 1995]中详尽论述了几种特定目的的创建模式,包括FACTORY METHOD(工厂方法)、ABSTRACT FACTORY(抽象工厂)和BUILDER(构建器)。该书主要研究了适用于最复杂的对象构造问题的模式。本书的重点并不是深入讨论FACTORY的设计问题原创 2021-12-14 10:41:44 · 1055 阅读 · 0 评论 -
DDD驱动领域设计之聚合根
Aggregate在具有复杂关联的模型中,要想保证对象更改的一致性是很困难的。不仅互不关联的对象需要遵守一些固定规则,而且紧密关联的各组对象也要遵守一些固定规则。然而,过于谨慎的锁定机制又会导致多个用户之间毫无意义地互相干扰,从而使系统不可用。换句话说,我们如何知道一个由其他对象组成的对象从哪里开始,又到何处结束呢?在任何具有持久化数据存储的系统中,对数据进行修改的事务必须要有范围,而且要有保持数据一致性的方式(也就是说,保持数据遵守固定规则)。数据库支持各种锁机制,而且可以编写一些测试来验证。但这些特原创 2021-12-13 10:34:11 · 922 阅读 · 0 评论 -
DDD驱动领域设计之服务
服务领域服务层简介有时,对象不是一个事物。在某些情况下,最清楚、最实用的设计会包含一些特殊的操作,这些操作从概念上讲不属于任何对象。与其把它们强制地归于哪一类,不如顺其自然地在模型中引入一种新的元素,这就是SERVICE(服务)。有些重要的领域操作无法放到ENTITY或VALUE OBJECT中。这当中有些操作从本质上讲是一些活动或动作,而不是事物,但由于我们的建模范式是对象,因此要想办法将它们划归到对象这个范畴里。一些领域概念不适合被建模为对象。如果勉强把这些重要的领域功能归为ENTITY或VA原创 2021-12-10 11:26:37 · 276 阅读 · 0 评论 -
DDD驱动领域设计之实体
实体实体又称为( Reference Object)是DDD(Domain Driven Design)中核心概念.Eric Evans是这样描述实体的 “一个没有从其属性,而是通过连续性和身份的线索来定义的对象”有一类对象看上去好像拥有标识符,它的标识符在历经软件的各种状态后仍能保持一致。对这些对象来讲这已经不再是它们关心的属性,这意味着能够跨越系统的生命周期甚至能超越软件系统的一系列的延续性和标识符。我们把这样的对象称为实体。示例在现实生活中,我们每个人都是一个实体,我们每个人的身份证号就是我原创 2021-12-09 15:51:19 · 356 阅读 · 0 评论 -
什么是领域驱动设计
领域驱动设计(DDD)是Eric Evans在他的开创性著作《领域驱动设计:解决软件核心的复杂性》(Addison-Wesley Professional,2003)中定义的一种开发理念。DDD是一种软件开发方法,使团队能够有效地管理复杂问题域的软件构建和维护。原创 2021-12-08 11:13:10 · 1769 阅读 · 0 评论 -
架构演进史之MVC 及其替代方案
MVC 及其替代方案创建可维护的应用程序一直是构建应用程序的真正长期挑战。然而,早在20世纪70年代,混合责任是常见的做法,人们仍在努力发现如何做得更好。随着应用程序复杂性的增长,对 UI 进行更改将不可避免地意味着对业务逻辑的更改,从而增加了更改的复杂性、执行这些更改所花费的时间以及 Bug 的可能性(因为会更改更多代码)。MCV通过促进前端和后端之间的"关注点分离"来解决这些问题。1979 – 模型-视图-控制器为了解决上面解释的问题,1979年,Trygve Reenskaug提出了MVC模原创 2021-12-07 11:20:14 · 563 阅读 · 0 评论 -
架构演进史之EBI 架构
EBI 架构实体边界交互器(EBI)架构已经由Robert C. Martin在他关于清洁架构的演讲中(我将在后面的文章中讨论)中广为人知。但是,这种模式是由Ivar Jacobson在1992年出版的,在他的书《面向对象的软件工程:一种用例驱动的方法》中。当时,Jacobson实际上称它为实体-接口-控制,但名称被更改,以便"接口"不会与"接口"语言结构(某些语言甚至没有)或"用户界面"混淆,并且"控制"不会与MVC控制器混淆。实体Entity 对象保存系统使用的数据以及自然耦合到此数据的所有行为原创 2021-12-06 09:04:05 · 724 阅读 · 0 评论 -
架构演进史之整体式架构
构建整体式架构一直是默认的建筑风格。我的意思是,一开始我们每个应用程序都有一个文件,然后我们开始拥有包含多个文件的应用程序,直到1990年代,我们才开始看到由其他应用程序组成的应用程序(尽管第一次实验是在1980年代)。原创 2021-12-05 10:10:16 · 424 阅读 · 0 评论 -
架构演进史之分层架构
分层架构分层是一种常见的做法,用于根据代码单元在系统中的角色/职责来分隔和组织代码单元。在面向对象的程序中,UI、数据库和其他支持代码通常直接写入业务对象。其他业务逻辑嵌入在 UI 小部件和数据库脚本的行为中。发生这种情况是因为从短期来看,这是使事情发挥作用的最简单方法。当与域相关的代码通过如此大量的其他代码扩散时,它变得非常难以看到和推理。对 UI 的表面更改实际上可以更改业务逻辑。若要更改业务规则,可能需要对 UI 代码、数据库代码或其他程序元素进行细致的跟踪。实现连贯的、模型驱动的对象变得不切原创 2021-11-27 14:33:34 · 508 阅读 · 0 评论 -
DDD 领域驱动设计
DDD 简介领域驱动设计(DDD) 是一种通过将实现连接到持续进化的模型来满足复杂需求的软件开发方法. 领域驱动设计的前提是:把项目的主要重点放在核心领域和领域逻辑上把复杂的设计放在领域模型上发起技术专家和领域专家之间的创造性协作,以迭代方式完善解决特定领域问题的概念模型更多的介绍可以参考维基百科中的定义分层.NET中的ABP框架遵循DDD原则和模式去实现分层应用程序模型,该模型由四个基本层组成:表示层: 为用户提供接口. 使用应用层实现与用户交互.应用层: 表示层与领域层的中介,编原创 2021-04-12 16:39:27 · 206 阅读 · 0 评论 -
DDD领域驱动设计之值对象
值对象什么是值对象当一个对象用于对事务进行描述而没有唯一标识时,它被称作值对象(Value Object)。值对象通常是用来度量和描述事物。我们可以非常容易的对其进行创建,测试,使用,优化和维护,所以在建模时,我们尽量采用值对象来建模。@Datapublic class ColorInfo{ private String name; private String css; private String width;}{ "name":"yellow", "cs原创 2021-04-12 16:37:54 · 611 阅读 · 0 评论