领域驱动设计
文章平均质量分 55
damon2636
卖女孩的小火柴
展开
-
如何通过CQRS架构高效解决12306的库存问题
12306主要性能问题还是出在出票和余票查询。当前通过CQRS架构结合聚合根在内存、事件回溯的手段来解决以上两个问题。 实现了买票、退票、站点最多可卖座位数限制、 站点间预留票(最低保留座位数,最多可卖座位数)、取消预留票功能。主要用到两个数据结构为跳表、位图。假设车次k41有途径4个站点分别为1,2,3,4,总共8个座位。1.初始化车次站点票信息10002 表示表示站点1到站点2, 0000 0000 表示有8个座位,下标从0-7.20003 表示表示站点2到站点3, 0000 0000 表..原创 2022-02-10 11:42:00 · 675 阅读 · 0 评论 -
微服务设计和拆分的原则
1.微服务的接口粒度应该多大?完成一个用例的作为服务服务接口的粒度是合理的,拆的太细面临事务问题。2.微服务到底应该如何拆分和设计?业务模型拆分:前后台业务拆分、主链路查费、领域模型拆分、用户群体拆分压力模型拆分:对于高并发量的业务,尽可能独立成微服务拆分1.压力模型拆分压力模型拆分,就是说根据用户对业务的访问量的高频进行拆分,假如存在某些服务的调用量特别巨大,我们可以将此服务独立出来单独部署。对于压力模型我们还可以细分三个维度1.高频高并发的情况。例如:商品详情页查询。他是一个高频高并发原创 2021-02-21 22:44:04 · 2605 阅读 · 4 评论 -
领域驱动设计使用中的误区
DDD的兴起的确是在微服务的流行后,才真正得到开发人员的重视。DDD的可以帮助我们更加合理的进行微服务边界划分。所以很多人的对他的认知都是DDD只适应于微服务。这个认知并不能算是合理的。单体架构也可以适用DDD的设计方法论。互联中我们有碰到很多微服务拆分过渡导致项目维护、管理难度加大,甚至失败的都有。我们一个团队可能就10个人,当我们面对一个小商城系统时,我们可能会噼里啪啦一下拆了20多个微服务出来,这个是很恐怖的。因为一旦微服务化很多问题都会接踵而来,事务、超时、熔断、限流、服务监控、排错等问题。我们有限原创 2021-02-19 22:54:02 · 190 阅读 · 1 评论 -
领域驱动设计-聚合与聚合根
聚合根一组相关对象的集合,作为一个整体被外界访问。聚合根包含:实体、值对象。聚合根作为与外部交互的协调者,负责对聚合根内的行为进行管理,对外部屏蔽实现细节。那到底什么样的一个东西是聚合根?购物系统里的订单、购物车,学生管理系统的学生都是聚合根实体。订单聚合根包含:订单明细(实体)、商品(值对象)、收货地址(值对象)、订单编号、订单id等属性。大家可能会疑惑我应该如何去识别聚合根内部应该要有什么东西呢。总结如下,封装不变性。1.一个业务应该要有什么东西组合而成才是完整的。(一个订单必须要有收货人、订单.原创 2021-02-08 22:52:20 · 761 阅读 · 2 评论 -
面向对象与数据库的阻抗
在面向对象设计的系统中,数据存在于对象之中,而关系数据库,数据存在数据表记录中。当我们用面向对象语言进行设计时,我们需要将这两个不同领域层次的东西进行转换传输或存储。在这个过程中,我们来来回回需要建立很多的零食对象,增了不少系统的复杂性。让很多开发人员觉得用着面向对象的语言,开发速度并没有想象的那么高。这里面其实存在一个未被突破的规则,就是面向对象并没有完全占领整个应用系统。 举例来说在现实世界中,学生和老师都是人,他们有很大一部分共性的东西,当然他们之间也还是有...原创 2021-01-30 02:42:18 · 213 阅读 · 1 评论