1 Star 1 Fork 1

永遇乐 / ddd

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

ddd

介绍

DDD之代码模型

软件架构

按照DDD的四层分层架构

代码模型

image

用户接口层(apis)

用户接口层是前端应用和微服务之间服务访问和数据交换的桥梁。它处理前端发送的 Restful 请求和解析用户输入的配置文件等,将数据传递给应用层。
获取应用服务的数据后,进行数据组装,向前端提供数据服务。主要服务形态是 Facade 服务。
完成服务定向,DO 与 DTO 数据的转换和组装,实现前端与应用层数据的转换和交换。

如果存在多个限界上下文,请增加一层包名

Facade(API接口)
	BusinessFacade
DTO(数据传输对象)
	BusinessDTO
Assembler(对象转换器)
VO(视图对象)
    BusinessVO
base(基础封装)
    valid(参数校验):API请求参数的统一处理,校验、排序和类型转换等
security(统一鉴权服务):统一安全防护和身份鉴权等

应用层(applications)

应用层用来表述应用和用户行为,负责服务的组合、编排和转发,负责处理业务用例的执行顺序以及结果的拼装,负责不同聚合之间的服务和数据协调,负责微服务之间的事件发布和订阅。
除了完成服务的组合和编排外,应用服务内还可以完成安全认证、权限校验、初步的数据校验和分布式事务控制等功能。

如果存在多个限界上下文,请增加一层包名

Service(应用服务)
	AppService:应用服务类
Event(事件)
    XxxEventPublish(事件发布实现)
    XxxEventListener(事件监听器)
init(初始化配置)

领域层(domains)

领域层实现核心业务逻辑,负责表达领域模型业务概念、业务状态和业务规则。主要的服务形态有实体方法和领域服务。
DDD 提倡富领域模型,尽量将业务逻辑归属到实体对象上,实在无法归属的部分则设计成领域服务。领域服务会对多个实体或实体方法进行组装和编排,实现跨多个实体的复杂核心业务逻辑。

如果存在多个限界上下文,请增加一层包名

Xxx(聚合)
	XxxAR(聚合根)
	entity(实体和值对象)
	DO(领域对象)
	service(领域服务)

抽象接口层(interfaces)

采用依赖倒置的方式,分别被应用层、领域层和基础设施层依赖,负责对特定服务的接口抽象,方便其他层进行调用。

缓存服务(cache):缓存服务的抽象接口
消息服务(notice):消息服务的抽象接口
    event
        AppXxxEnvent(应用事件)
        XxxEnvent(领域事件)
    publish
        EventPublish:事件发布器
持久化服务(persistence):持久化接口
    mapper
    repository

基础设置层(infrastructure)

主要存放基础资源服务相关的代码,为其它各层提供的通用技术能力、三方软件包、数据库服务、配置和基础资源服务的代码都会放在这一层目录里。

持久化接口实现(persistenceImpl)
	mysql
	mongodb
缓存服务实现(cacheImpl)
消息服务实现(noticeImpl)

全局共用层(global)

公共配置(config):公共的初始化配置等
常量集(constants):全局共用的常量集
统一异常处理(exception):最终异常的统一捕获和处理等
文件服务(file)
统一日志服务(log):切面日志等统一日志封装
工具集(utils):全局共用的实用工具集
统一异常处理(exception)
统一日志服务(log)
工具集(utils)

使用说明

  1. 其实代码模型本就没有一个标准的结构,全凭各自的经验总结而得。
  2. 关于DDD是否要在微服务中落地,也不一定,如果是一个小型的项目,那么一个工程就包含了所有,我们只需要按照不同的限界上下文以包名为边界即可。当系统变大需要拆分时按照限界上下文进行拆分即可。
  3. DDD只是一种软件设计和开发的指导思想,主要它帮我们理清了业务,划清了边界,并且以分层的代码模型规定了代码的依赖关系,使之更加解耦了。

参与贡献

  1. Fork 本仓库
  2. 新建 Feat_xxx 分支
  3. 提交代码
  4. 新建 Pull Request

码云特技

  1. 使用 Readme_XXX.md 来支持不同的语言,例如 Readme_en.md, Readme_zh.md
  2. 码云官方博客 blog.gitee.com
  3. 你可以 https://gitee.com/explore 这个地址来了解码云上的优秀开源项目
  4. GVP 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目
  5. 码云官方提供的使用手册 https://gitee.com/help
  6. 码云封面人物是一档用来展示码云会员风采的栏目 https://gitee.com/gitee-stars/

空文件

简介

DDD之代码模型 展开 收起
Java
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/haoshijin/ddd.git
git@gitee.com:haoshijin/ddd.git
haoshijin
ddd
ddd
master

搜索帮助

14c37bed 8189591 565d56ea 8189591