背景 我们的springboot项目是通过k8s部署的,我们使用了G1垃圾回收器作为jvm的垃圾回收器,同时也配置了如下的各种应对jvm oom崩溃时的参数;在服务上线的一周...
背景 我们的springboot项目是通过k8s部署的,我们使用了G1垃圾回收器作为jvm的垃圾回收器,同时也配置了如下的各种应对jvm oom崩溃时的参数;在服务上线的一周...
为什么ConnectionFinalizerPhantomReference 对象不会随着时间变少,一天4800个,那什么时候会减少呢?
数据库连接池配置不当导致的full gc问题记录背景 线上有个流量比较大的服务,qps日常在2000-3000之间,请求方对耗时要求比较高,响应时间要求在300ms以内,服务上线以后,运行也比较平稳。某天夜里,突然有几千个...
前言 之前关于实体和值对象的文章中有提过迪米特发则以及告诉而非询问原则。偏向于值对象的设计方法,今天参考马丁福勒的文章https://martinfowler.com/bli...
前言 参考官方文档:https://pinpoint-apm.gitbook.io/pinpoint/getting-started/installation#3-pinpo...
前言 redis自带的StringSerializer性能相对较差,redis官方推荐kryo来提高序列化和反序列化速度,推荐snappy来节约redis内存和网络带宽,在s...
https://www.info.ucl.ac.be/~pvr/PrincipleOfLeastExpressiveness.pdf[https://www.info.ucl...
确实,整洁架构和ddd虽然是两码事,但是这个架构比较符合ddd设计思想。ddd的战术设计就是指导代码实现的。您说的优势1是战略设计过程中拆分问题域,得出上下文。2类似于事件风暴规划出聚合。至于两个关联一个循环不了解是什么。每个人落地的ddd都会有区别,对ddd的领悟也不尽相同。但归根到底是要服务于业务的
为什么要DDD一、传统架构的劣势 0、面向数据库建模,更加关注数据、关注有哪些表哪些列,只要数据最终落库,中间逻辑可以采取任何形式。忽略了业务中非常重要的“行为\动作\业务逻辑” 的建模,...
已经在项目里实施过了。由于项目不是特别复杂,迭代版本还不多,ddd优势还没有完全发挥出来。相反代码量要比传统方式多了一些,数据库设计由于项目限定要求mysql,也多做了一些工作。目前来看收益有几部分。第一,组内所有人对业务理解都很透彻,因为一起做过事件风暴,可以反向的判断pm的需求提的是否合理,同时可以判断新需求代码写在哪里合适,是不是属于本上下文。第二,项目实施过程中为了适配前端改了很多版本代码,但都没有影响到业务逻辑,对一些数据库的表字段变更也没有影响到核心业务逻辑。第三,服务拆分时战略设计和上下文映射提供了很大帮助,不是拍脑袋决定拆,而是有法可依。第四,是分层带来的收益了,从编译器级别对类的随意注入做了限制,长期来看应该可以避免一些网状引用。第五,整洁架构带来的收益,tob项目插件式架构可以适配多个公司的多种数据库缓存消息队列等,而不会影响核心逻辑。
为什么要DDD一、传统架构的劣势 0、面向数据库建模,更加关注数据、关注有哪些表哪些列,只要数据最终落库,中间逻辑可以采取任何形式。忽略了业务中非常重要的“行为\动作\业务逻辑” 的建模,...
前言 领域事件是领域驱动设计中的重中之重,事件风暴的时候确认的领域事件可以直接应用在我们的代码设计中,但是领域事件在哪里发布、领域事件的应该是自己写还是直接利用spring的...
前言 首先看下领域驱动设计中对应用层和领域层的解释: 从解释中我们可以看出,应用层的任务是与其他系统应用层合作、为领域层进行协调,实际上还包括了翻译等工作,具体工作可以参考一...
前言 应用服务层是Domain层的直接消费者,同时也是外部想要调用领域层的门面。应用服务内部包含了翻译外部数据到领域对象的逻辑、为领域服务准备领域对象的逻辑、调用领域服务或者...
一、整洁架构分层 整洁架构分层如图所示,从内到外分别为实体->用例->接口适配器->框架与驱动程序。其中实体层和用例层包含业务逻辑、接口适配器层是翻译层,负责把外部数据翻译成...
前言 聚合是由实体和值对象组成的一个整体概念,聚合根就是组成这个聚合的一个实体。 聚合设计原则 参照沃恩弗农: 1、在聚合边界内保护业务规则不变性 比如业务规则是 a=b+c...
前言 值对象是状态不可变的、可整体替换的、用于度量和描述领域中某件东西的对象。在落地DDD过程中我们常常遇到一个概念到底是建模成实体好还是建模成值对象好这种问题,其实各DDD...
前言 实体和值对象的区分是领域驱动设计中的老大难问题,建模过程中是必然会遇到的问题,我们在落地领域驱动设计过程中就遭遇了这类问题,下面介绍下我们落地过程中的经验。 实体 实体...
前言 DDD架构分层由内到外主要分为domain层->application层->infrastructure层->interface层其中领域服务属于domain层、应用服...
前言 DDD分为战略设计和战术设计,战略设计就是划分子域和限界上下文的过程。领域划分为子域的通用划分形式是把领域划分为 核心子域、支撑子域、通用子域。我们在落地过程中常常会很...
前言 CQRS在领域驱动设计中非常常见,也非常好用,简单来说就是对领域模型的修改和对领域生成数据的读取职责是相互分离的。 CQRS分类 CQRS在落地过程中分为几种 第一种是...