梳理
- 定位url
- 从 项目 -> app -> appname -> internal ->service ->appname 中 定位grpc 逻辑
biz
// 业务逻辑的组装层,类似 DDD 的 domain 层,data 类似 DDD 的 repo,而 repo 接口在这里定义,使用依赖倒置的原则。
data
// 业务数据访问,包含 cache、db 等封装,实现了 biz 的 repo 接口。我们可能会把 data 与 dao 混淆在一起,data 偏重业务的含义,它所要做的是将领域对象重新拿出来,我们去掉了 DDD 的 infra层(基础设施层(Infrastructure Layer))。
service
// 实现了 api 定义的服务层,类似 DDD 的 application 层,处理 DTO 到 biz 领域实体的转换(DTO -> DO),同时协同各类 biz 交互,但是不应处理复杂逻辑
- 用户界面(User Interface):
- 负责展示数据给用户,并收集用户的输入。
- 可以是 Web 界面、命令行界面、API 等。
- 应用层(Application Layer):
- 定义软件要执行的操作,如创建订单、删除用户等。
- 协调领域层来执行这些操作,并返回结果给用户界面。
- 领域层(Domain Layer):
- 包含业务逻辑和业务规则。
- 定义领域模型、实体(Entity)、值对象(Value Object)、聚合(Aggregate)、领域服务(Domain Service)和领域事件(Domain Event)。
- 是 DDD 中最核心的部分,负责业务逻辑的实现。
- 基础设施层(Infrastructure Layer):
- 提供技术能力,如数据库访问、消息传递、文件系统操作等。
- 为应用层和领域层提供支持,但不应包含业务逻辑。
- 持久化层(Persistence Layer):
- 负责数据的存储和检索。
- 通常位于基础设施层内,有时也被称为仓储(Repository)模式。
- 读模型(Read Model):
- 用于报告和显示目的,不同于写模型(Write Model)。
- 读模型优化了查询性能,可能包含对数据的变形或聚合。
在DDD中,数据访问和持久化通常通过以下概念来实现:
- 仓储(Repository):
- 仓储是DDD中用于数据访问的主要模式之一。
- 它封装了对聚合(Aggregate)的检索和持久化逻辑。
- 仓储定义了一组方法,用于查询和保存领域中的聚合根(Aggregate Root)。
- 工厂(Factory):
- 工厂用于创建复杂的聚合或对象。
- 它们封装了创建对象的逻辑,确保对象在创建时就处于有效状态。
- 应用服务(Application Service):
- 应用服务是协调领域层对象执行任务的入口点。
- 它们处理应用程序的工作流程,调用领域对象执行业务逻辑。
- 领域服务(Domain Service):
- 领域服务包含领域逻辑,但它们不自然属于任何聚合。
- 它们通常用于执行跨越多个聚合的操作。
- 实体(Entity)和值对象(Value Object):