DDD-领域驱动设计包结构

不少小伙伴在实践DDD领域驱动设计的时候,应该都有纠结过项目的结构应该如何设计。
经过实践,本人总结了一个比较实用的项目结构。今天就跟大家分享一下。

本文适合读者:

  1. 了解DDD领域驱动设计概念;
  2. DDD领域驱动设计实践中遇到难题;

在这里插入图片描述

1. 项目结构模块依赖关系:

模块依赖图:
在这里插入图片描述

项目的结构主要分为5个模块:
其中 用户接口层,应用层,领域层和基础设施层 的作用在这里就不做过多介绍了,通用工具层指的是自己团队的通用工具,是一些技术性的工具,不能包含有业务相关实现的工具类,但是,如果你的项目在开发过程中也需要编写一些技术通用的工具,那么就可以自己创建一个通用工具层。

2. 依赖关系介绍

从图中可以看出,用户接口层依赖应用层,应用层依赖领域层和基础设施层,领域层只依赖通用工具。

基础设施层比较特殊,除了依赖通用工具,还会依赖领域层。这个关系就是核心所在,领域层中只编写业务相关的代码逻辑,不包含任何的技术性的实现,当需要存储或者调用其他服务时,都是通过接口调用,而接口的实现在基础设置层,所以是基础设施层依赖领域层。这种依赖关系叫做依赖倒置

举个例子:
当一个订单领域在执行业务行为的过程中,需要获取历史订单数据,这个时候,通过调用 OrderRepository 接口的某个方法来获取的。而 OrderRepositoryImpl 接口的实现类实际在基础设施层。对于领域层来说,并不需要关心这些数据是怎么来的。

同时依赖基础设施层的还有应用层,如果说在实际的开发过程中,想要实现的功能只是简单的CRUD,那么完全可以直接调用基础设施层的数据存储实现,不需要经过领域层。如果只是为了依照规则通过领域层再去调用基础设施层,那这样就完全可以称为是过度设计,其实大可不必。

3. 实现示例

1 用包划分
在这里插入图片描述

2 使用Maven子模块划分
在这里插入图片描述

无论通过包划分还是Maven模块划分,从逻辑上讲都可以实现。但是这两种实现方式有一个区别,就是约束性的强弱不同。

通过包划分,虽然可以跟团队成员口头描述每个包之间的依赖关系,但是这个需要依靠每个开发者自己控制,如果开发者想要在领域层编写一些技术实现的代码,依然是可以的。

但是如果是Maven模块进行划分,就能在代码上进行约束了,领域层并没有依赖基础设施层,所以无法实现数据存储和查询等技术。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: DDD领域驱动设计)是一种软件架构风格,它强调在设计软件时要着重于领域模型。领域模型是专门用来表示业务领域的模型,它的目的是帮助理解和描述业务流程。 在DDD项目中,通常会有一个专门用来存放领域模型的目录,这个目录通常被称为“领域层”(domain layer)或“领域模型层”(domain model layer)。这个目录中通常会含以下内容: - 实体(entity):表示业务中的持久化对象,例如客户、订单等。 - 值对象(value object):表示业务中的不可变对象,例如地址、颜色等。 - 抽象基类(abstract base class):为实体和值对象提供公共的属性和方法。 - 仓储接口(repository interface):定义了对实体的持久化操作的方法,例如保存、查询等。 - 服务接口(service interface):定义了与业务流程相关的方法,例如创建订单、计算价格等。 通常情况下,这些内容都会被放在单独的文件或文件夹中,以方便维护和管理。 此外 ### 回答2: DDD领域驱动设计)数据领域模型项目目录结构可以按照以下方式组织: 1. 应用层(Application Layer):这个目录含了应用层的代码,主要负责接收并处理用户的请求,协调各个领域服务的调用。其中可能括处理用户身份验证、授权、输入参数校验等功能。 2. 领域层(Domain Layer):这个目录含了领域模型的代码,用来表示业务领域中的概念、规则和逻辑。其中可能括实体(Entity)、值对象(Value Object)、领域服务(Domain Service)等。 3. 基础设施层(Infrastructure Layer):这个目录存放与基础设施相关的代码,用来处理与外部系统的交互和数据持久化。可能括数据库操作、消息队列、缓存、外部API调用等。 4. 接口层(Interface Layer):这个目录用来定义与外部系统交互的接口,可以括RESTful API、GraphQL接口、消息队列接口等。 5. 共享内核(Shared Kernel):这个目录存放一些通用的领域模型、工具类、扩展方法等,可以被整个项目共用。 6. 测试目录(Test):这个目录存放各个层面的测试代码,括单元测试、集成测试、端到端测试等。 7. 配置文件(Config):这个目录存放项目的配置文件,可以括数据库连接配置、日志配置、缓存配置等。 以上仅是一种可能的DDD项目目录结构,具体结构可以根据项目的规模、复杂度和需求来进行调整和扩展。重要的是保持代码的组织结构清晰,遵循领域驱动设计的原则,将业务逻辑和领域概念体现在代码中,提高代码的可读性和可维护性。 ### 回答3: DDD领域驱动设计)数据领域模型项目的目录结构会根据具体项目的需求和技术栈而有所不同,但一般括以下几个核心部分: 1. 领域模型层(Domain Model):含了业务领域的核心概念、实体对象和值对象等。在这个目录中,可以根据业务域划分或文件来组织模型,比如可以有用户(User)、订单(Order)、产品(Product)等业务领域模型。 2. 应用服务层(Application Services):负责处理应用层与领域模型之间的交互逻辑。这个目录中通常会含一些应用服务接口(接口定义)和实现类,它们调用领域模型层,提供一些对外的接口供上层应用(如控制器)调用。 3. 基础设施层(Infrastructure):含了与外部系统的交互、数据存储等功能。这个目录中可能含一些与数据库相关的代码、与外部服务交互的代码等。比如可以有数据库访问层、第三方服务接口层等。 4. 用户界面层(User Interface):负责与用户进行交互,通常含了控制器、表现层逻辑和前端页面等。这个目录中可以含一些控制器、视图模板、静态资源等。 5. 配置文件和脚本:项目的一些配置文件和部署脚本等。这些文件可以括数据库连接配置、日志配置、缓存配置等。 以上是一个基本的目录结构,但实际项目中可以根据具体需求进行调整和扩展。根据项目的规模和复杂性,可以进一步划分子目录,或者引入模块化的设计来组织代码结构。在DDD项目中,目录结构的合理组织可以提高代码的可读性和可维护性,同时也更好地支持领域模型的驱动设计思想。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值