DDD领域驱动设计
文章平均质量分 85
极道Jdon
这个作者很懒,什么都没留下…
展开
-
DDD、Wardley映射和团队拓扑
Susanne 解释了她如何将 3 种不同的方法(Wardley映射、领域驱动设计和团队拓扑)联系起来,以设计和构建自适应系统以实现快速变化,以及为什么任何组织都必须拥有自适应系统。她是即将出版的《具有领域驱动设计、Wardley映射和团队拓扑的自适应系统:流程架构》一书的作者。这三者之间的关系如下:通常是从用户和他们所反映的用户需求开始采用Wardley地图,然后是领域驱动设计中的问题域划分;然后开始识别这些用户需求中的哪些是核心子域,试图提炼出子域并发现...转载 2022-05-08 08:41:50 · 199 阅读 · 0 评论 -
domain-driven-hexagon:领域驱动六边形的Javascript案例
学习领域驱动设计DDD、软件架构、设计模式、最佳实践的包含Javascript案例该项目的主要重点是就如何设计领域驱动六边形Domain-Driven Hexagon软件应用程序提供建议。本自述文件介绍了从不同来源收集的一些技术、工具、最佳实践、架构模式和指南。代码示例是使用NodeJS、TypeScript、NestJS框架和Typeorm 编写的,用于数据库访问。虽然这里介绍的模式和原则与框架/语言无关,但上述技术可以很容易地用任何替代方案替换。无论使用什么语...转载 2022-04-16 09:44:02 · 248 阅读 · 0 评论 -
DDD设计何时适可而止?
无论是敏捷和瀑布,软件开发都有一个设计过程,实际也是了解知识准备过程,属于坐而论道,那么什么时候动手开干?1. 首先,动手开干的标志是什么?见这篇文章:按技术职责还是按领域职责来构建代码?文章里谈了代码如何组织包模块,也就是com.jdon.XXX的设计,这个XXX设计不是拍脑袋想出来的,而是基于你对领域的理解,如果你对业务领域不理解,你会直觉按照技术职责划分,或者按照团队划分,如果你业务领域理解了,那么会按照领域职责划分。2. 那么理解业务领域的标志是什么?见这...转载 2022-04-02 13:29:30 · 131 阅读 · 0 评论 -
按技术职责还是按领域职责来构建代码? - Reddit
在构建 REST api 时,您会选择:选项 A:├── controllers│ ├── order.go│ ├── region.go│ └── user.go├── models│ ├── order.go│ ├── region.go│ └── user.go└── repos├── order.go├── region.go└─...转载 2022-03-29 09:50:50 · 81 阅读 · 0 评论 -
领域驱动设计实践:支付系统建模 - Xiao
在Airwallex,领域驱动设计(DDD)方法被用来指导如何对复杂的业务问题和系统设计进行建模。在这篇博客中,我们试图全面介绍用DDD模式对支付系统进行建模的做法。简介支付系统是一个相当复杂和多变的系统,从订单、欺诈、通知、与各种支付方式的整合到资金清算和结算,涉及面很广。在处理一个复杂的系统时,大多数开发人员可能会遇到一些问题边界和责任不明确,只是一个有许多模型和业务逻辑的大应用程序。没有隔离和模块化:复杂的业务工作流和流程是混合的,难以扩展。没有关注点...转载 2022-03-18 09:13:17 · 542 阅读 · 0 评论 -
基于函数式编程的领域驱动设计 - Scott Wlaschin
Scott Wlaschin 是一名开发人员、架构师和作家。他是流行的 F# 网站 fsharpforfunandprofit.com 的作者,以及 Pragmatic Bookshelf 出版的《Domain Modeling Made Functional》一书的作者。Scott 以其对函数式编程的非学术方法而闻名。以下是摘要,原文点击标题在一个经典的数学函数中,事物是不会改变的。例如,当你说二加二时,当你做加减乘除时,数字二不会改变。你会有一个新的数字,你不...转载 2022-03-13 10:05:06 · 278 阅读 · 0 评论 -
业务系统中资源争夺情况是不存在的
比方说,我们得到的要求是以下要求。1. 如果订单已经发货了,不要让用户取消订单。2. 如果订单已经被取消,不要让用户运送订单。这里的竞赛条件是当我们有两个用户在看同一个订单,这个订单既没有取消也没有发货,并且每个人都提交了一个命令:一个是发货,另一个是取消订单。在这些情况下,代码很简单:只是在执行相关命令前的一个if语句。时间上的微秒差异不应该对核心业务行为产生影响。这意味着我们实际上在这里得到的是需求中的一个错误。用户实际上在这里支配着解决方案而不是需求...转载 2022-02-08 10:48:33 · 58 阅读 · 0 评论 -
如何从Spring之外的非托管对象访问 Spring Bean?
实体、值对象、DTO或VO、record之类基本都是只有getXX/setXX的对象(record除外),当DDD领域设计为这些对象赋予业务行为以后,这些业务行为会与技术环境如Srping管理的bean相互交互,在clean架构中实现为适配器或端口,但是具体如何在Java中落地?另外,我们可能需要将 Spring Beans 注入 JPA 实体或其他一些非托管对象,这可能表明我们需要重新考虑我们的架构,但有时这是无法避免的。可以使用@Configurable注释来...转载 2022-02-07 11:21:11 · 385 阅读 · 0 评论 -
被误解的单一职责原则 - Joe
谷歌工程主管乔·林奇的文章,获得SOLID原则作者鲍勃大叔点赞转发的文章:作者推荐将SRP视为DDD原则的自然结果:跨DDD限制上下文共享的模型是不安全的。单一职责原则 (SRP) 是SOLID设计原则中的第一个,自 2000 年由罗伯特·马丁(“鲍勃大叔”)引入以来,它们在软件工程中产生了极大的影响。不幸的是,这一特定原则经常被误解。再加上盲目的信念,这可能会导致过于简单化的思维和设计错误。该原则经常被定义为“每个软件模块都应该有一个且只有一个改变的...转载 2022-01-24 10:40:35 · 119 阅读 · 0 评论 -
使用Spring Data JPA在更改实体时发布DDD领域事件 - thorben
从 Spring Data JPA 1.11(Ingalls 版本)开始,您可以在保存实体对象时自动发布域事件。您只需要向实体类添加一个方法,该方法返回要发布的事件对象的 集合 ,并使用@DomainEvents注释该方法 。Spring Data JPA 调用该方法并在您执行 实体存储库的save 或 saveAll方法时发布事件 。与其他 Spring 应用程序事件类似,您可以使用@Even...转载 2021-10-27 09:06:04 · 615 阅读 · 0 评论 -
多年的教训:根据DDD设计原则改变JPA/Hibernate的使用方式 - lorenzo
我最近一直在更新一些培训材料,思考JPA更好的教学方法和讨论方式。我一直在思考的一件事是我们通常是如何使用JPA?这里结合我所经历的(和观察到的)痛苦,应该如何改变传统使用方式?JPA通常被视为一组注释(或XML文件),它们提供O/R(对象关系)映射信息。大多数开发人员认为他们知道和使用的映射注释越多,他们得到的好处就越多。但是在过去的几年里,与中小规模的巨石/单体/整体系统(大约有200张表/实体)的搏斗教会了我一些别的东西。教训:按ID引用实体(仅映射聚合中...转载 2021-06-17 08:32:42 · 423 阅读 · 0 评论 -
从 CRUD 迁移到事件溯源的秘诀 - eventstore
事件溯源是高性能协作域的一种很好的架构风格,可以保证它增加的复杂性。但正如我之前所说,就像任何其他原则或实践一样,即使是事件溯源也有利有弊。而且它不是顶级架构。您系统的某些部分可能会从中受益,但其他部分可能不会。话虽如此,如果您需要事件溯源,并且您有一个现有的、更传统的(又名 CRUD)应用程序,您可以遵循大致三种策略:保持一切原样,仅使用事件溯源构建系统的新部分通过并排重建现有子系统或域来隐藏它。然后,在重建完成后,切换所有现有消费者并自动迁移数据。对现有域进行...转载 2021-06-06 09:37:02 · 162 阅读 · 0 评论 -
踩坑微服务的十大经验 - Dave
当您公司的整体(monolithic)Web应用程序变得太大而脆弱。部署它变得缓慢而令人恐惧。因此,作为一家软件公司,您已决定遵循许多其他公司所采用的方法——将这个整体/单体架构拆分为微服务架构。这个迁移旅程可能漫长而艰难,潜伏着许多错误的踩坑,以及您想要避免的路径。我自己经历过,也许我的经验可以提供帮助。1. 你不知道你为什么采用微服务对于所有涉及的工作,微服务提供了许多好处。毕竟,这就是贵公司采用它们的原因。所以告诉我...什么是那些好处?为什么贵公司要转向微...转载 2021-05-29 09:38:03 · 236 阅读 · 0 评论 -
SpringBoot+DDD+Kafka最全面微服务教程
这是关于如何使用Spring for Apache Kafka在跨多个微服务的MongoDB中管理分布式数据模型。由多个微服务组成的现代分布式系统,每个微服务都拥有一个领域的聚合数据的子集,那么该系统几乎肯定会具有某些数据重复,在这种情况下,我们如何保持数据的一致性?Apache Kafka Apache Kafka是一个开放源代码的分布式事件流平台,能够处理数万亿条消息。根据Confluent(最初被认为是消息队列)的说法,Kafka基于分布式提交日志...转载 2021-05-27 09:23:01 · 875 阅读 · 0 评论 -
新的《敏捷宣言》 - Magno
如果未来发布”敏捷宣言“新版本,则应强调这样的重要性:如何理解和应对不同上下文!(纯敏捷反而不敏捷!上下文为王,需要根据自己的情况引入敏捷和决定敏捷方法)在《福特兰迪亚:亨利·福特被遗忘的丛林之城的兴衰》一书中:福特兰迪亚(Fordlandia)是嵌入亚马逊河心脏地带的“幽灵区”,恰好位于 巴西帕拉州的中西部。它是由亨利·福特(Henry Ford)在1920年代创建的,其使命是在另一个国家/地区建立新的领土,以培育美国人的梦想,可以使用大量的橡胶来降低...转载 2021-05-20 10:13:32 · 90 阅读 · 0 评论