最近发现文章老是被窃取,有些平台举报了还没有用.请识别我的id方丈的寺院. 摘要 DDD领域驱动设计,起源于2004年著名建模专家Eric Evans发表的他最具影响力的著名书籍:Domain-Driven Design –Tackling Complexity in the Heart of Software(中文译名:领域驱动设计,之后进行了很多迭代和演化,不过大多没有脱离这本书讨论的范围.因为Eric Evans在该书中只是提供了一套原始理论,并没有提供一套方法论,更别说可落地.所以十几年…
摘要:本文从DDD的核心概念讲起,重点放在如何把理论落地成代码,期望给那些正在探索DDD的同学一些指引和启发. 本文分享自华为云社区<跨越DDD从理论到工程落地的鸿沟>,作者:敏捷小智. DDD作为一种优秀的设计思想,的确为复杂业务治理带来了曙光.然而又因为DDD本身难以掌握,很容易造成DDD从理论到工程落地之间出现巨大的鸿沟.就像电影里面的桥段,只谈DDD理论姿势很优美,一旦工程落地就跪了......所以DDD的项目,工程落地很重要,否则很容易变成"懂得了很多道理,却依然过不好这一…
背景 几年前我总结过DDD战术设计的一些落地经验可落地的DDD(5)-战术设计,和一次关于聚合根的激烈讨论最近两年有些新的落地体验,回过头来发现,当初对这些概念的理解还是没有深入,这篇文章重新阐述下. 之前理解不到位的点有 战术设计的各个模块是的协作关系 哪些是问题空间问题,哪些是方案空间问题边界没有划分清楚. 实体和聚合根的区别理解不不深刻,实体和聚合根建模的方法不对. 以上问题将会在下文解释清楚. 战术设计拆解 DDD的战术设计即设计某个子域的领域模型以及代码落地.领域事件.领域对象.聚合根…
阅读此文需要一定的DDD基础,如果你是第一次接触DDD读者,建议先去阅读一些DDD相关的书籍或者文章之后再来阅读本文. 背景 自从我在团队中推行DDD以来,我们团队经历了一系列的磨难--先是把核心项目重构,接着又在一些衍生项目中尝试全面落地DDD, 最终探索了一些经验出来,特此记录一下. 本文采用语言无关的角度陈述,无论你是Java或者c#的开发同学相信都可以无障碍阅读. 请注意本文并不是介绍如何实现DDD,因为这个话题实在太大了. 这次的主题是分享一些我们团队在实践DDD过程中碰到问题和如何克…
摘要 在之前的文章DDD-CQRS能解什么问题中,阐述了什么是CQRS.但是并没有业务需求可以应用CQRS.最近需要处理一个文本增量更新的业务,经过需求分析后,尝试使用CQRS来解这个问题 问题分析 一个文本页面编辑,对象很大,之前是全量保存.涉及到的网络传输对象比较大,经常超时OOM,所以交互改成,只保存修改的部分,也就是增量更新. 之前业务中没法使用CQRS,在于使用CQRS后,数据的维护变得异常麻烦.比如我对一个表单进行了反复修改,生成了N份历史修改数据,获取最新数据时需要对这些历史数据进…
目录 前言 聚合 聚合和聚合根原则 包含业务原则 单个单元原则 事务边界原则 可序列化原则 聚合和聚合根最佳实践 只通过ID引用其他聚合 用于 EF Core 和 关系型数据库 保持聚合根足够小 聚合根/实体中的主键 聚合根/实体构造函数 业务逻辑和实体中的异常处理 实体中业务逻辑需要用到外部服务 学习帮助 前言 上一篇 基于ABP落地领域驱动设计-01.全景图 概述了DDD理论和对应的解决方案.项目组成.项目引用关系,以及基于ABP落地DDD的通用原则.从这本篇开始,会更加深入地介绍在基于 A…
 如果我看得更远,那是因为我站在巨人的肩膀上.(If I have seen further it is by standing on ye shoulder of Giants.)                                                                                                                                                              …
作者:小傅哥 博客:https://bugstack.cn 原文:https://mp.weixin.qq.com/s/ezd-6xkRiNfPH1lGwhLd8Q 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 领导:为什么要使用DDD? 我也苦思冥想,怎么跟领导说咱们从 MVC 升级到 DDD 吧,因为 DDD 代码结构更加清晰.领域驱动比测试驱动开发更加先进.研发的兄弟们也更想用用新框架等. 不过这么聊被喷一顿不说,还得说你是过度设计瞎折腾,咋回事呢?因为没聊到重点呀,你MVC升级…
前言 至少 30 年以前,一些软件设计人员就已经意识到领域建模和设计的重要性,并形成一种思潮,Eric Evans 将其定义为领域驱动设计(Domain-Driven Design,简称 DDD).在互联网开发 "小步快跑,迭代试错" 的大环境下,DDD 似乎是一种比较 "古老而缓慢" 的思想. 然而,由于互联网公司也逐渐深入实体经济,业务日益复杂,我们在开发中也越来越多地遇到传统行业软件开发中所面临的问题.本文就先来讲一下这些问题,然后再尝试在实践中用 DDD 的…
1.1.实例生命周期 每个 Vue 实例在被创建之前都要经过一系列的初始化过程.例如需要设置数据监听.编译模板.挂载实例到 DOM.在数据变化时更新 DOM 等.同时在这个过程中也会运行一些叫做生命周期钩子的函数,给予用户机会在一些特定的场景下添加他们自己的代码.比如 created 钩子可以用来在一个实例被创建之后执行代码: new Vue({ data: { a: 1 }, created: function () { // `this` 指向 vm 实例 console.log('a is…