领域驱动入门

一.代码示例

mvc和ddd

1.定价

2.转账

3.用户注册

4.权益推荐

基于流程图的事件,命令分析

二.背景

时间

人员

经典书籍

1994

GoF

design patterns

1999

maintin flowler

refactoring

2002

maintin flowler

Patterns of Enterprise Application Architecture

2003

Gregor Hohpe / Bobby Woolf

Enterprise Integration Patterns

2003

Eric Evans

Domain Driven Design

2008

Uncle Bob

Clean Code

2014

Vaughn Vernon

Implementing DDD

2018

Uncle Bob

Clean Architecture

三.DDD介绍

1.DDD是什么

以数据和表为中心改为以业务和领域模型为中心.确保业务模型和代码模型的一致性.

ddd:自上而下的过程拆解,自下而上的对象的抽象。

2.战略设计

分治的思路,领域,子域,核心域,通用域(权限、登录),支撑域,限界上下文,CQRS,通用语言,四色建模.

3.战术设计

实体(贫血+实体服务),领域服务,聚合,聚合根,Domain Primitive,值对象,领域事件,资源库,事件风暴,

4.分层

controller层,appliction层,domain领域服务层,infrastructure基础设施层,repository仓库层,acl防腐层

5.app层设计

6.领域层设计

(1).实体

  • 一个Entity内不应该直接注入另一个Entity或服务.可以作为方法入参传入回调
  • 涉及多个Entity变更或查询用领域服务实现
  • 只通过业务方法修改业务状态,避免set方法造成内部状态不一致.
  • 可以通过构造方法,默认参数,工厂模式创建对象.
  • 只保存外部实体的id
  • 行为方法只影响本实体或者子实体状态.
  • 实体与值对象,比如用户和住址,用户表里面有省市区的列。对应实体User和值对象Address.

(2).领域服务

  • 只影响单个实体,涉及查询多个实体,通过方法注入.
  • 影响多个实体状态的操作,跨实体事务

(3).聚合

聚合内的对象生命周期一致,问题域一致,使用场景频率一致,聚合内元素尽可能少.对外只暴露聚合根.

四.目前发展

cola

五.xxx系统

1.服务

核心域,支撑域,通用域

2.包结构

老service不增加.

层级

内容

出参

入参

controller层

controller,kafkaconsumer,xxxListener,xxxJob

网络协议的转化、权限管理,捕获异常,aop等.

CommonRspVo

xxxVo

application层

xxxManager,xxxHandler,xxxConvertor,xxxAssembler

业务流程的编排,调度,事务

没有具体业务逻辑.(无if分支,无计算逻辑).

参数校验.

xxxDTO

xxxVo或xxxReq,xxxCmd

domain层

xxxService

业务的原子能力

xxxEntity

xxxReq或者业务入参

infrastructure层

common,enum,constant,dao,config

枚举,公共包,常量,数据访问

六.参考书

<领域驱动设计:软件核心复杂性应对之道>

<实现领域驱动设计>

<领域驱动设计精粹>

<微服务架构设计模式>

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值