DDD领域驱动设计-DDD开源框架xtoon-boot

开源地址:https://gitee.com/xtoon/xtoon-boot

官网:http://xtoon-boot.xiangtoon.com

在线演示:http://xtoon-boot.demo.xiangtoon.com

如果有什么问题或建议可以加群(QQ:130950009),交流技术,分享经验。

微服务版xtoon-cloud(推荐):https://gitee.com/xtoon/xtoon-cloud

为何开源

项目初期或MVP阶段建议用DDD的单体框架开发应用,后期根据领域的不同弹性需求是再改造成微服务版。
个人不建议开始就上微服务,服务拆分的很细,这只会增加开发成本和风险,个人认为应该选择合理的框架和方案,确保后期能快速的、低成本的从单体过度为微服务。
这正是我们开源基于DDD的xtoon框架的初衷,目前单体应用版和微服务版都已发布正式版,希望给践行DDD和微服务的开发者们带来一些价值,谢谢!

为何选择xtoon-boot

  • 解决编写过程式和事务代码,造成后期维护逻辑混乱、维护成本高的痛点;
  • 抛弃MVC框架,拥抱更适合复杂业务的开发框架;
  • 网上基本讲的都是DDD的理论很少有讲怎么落地,xtoon-boot提供了完整落地方案和实践;
  • 可以快速开发,框架提供了系统管理和组织架构等核心模块;
  • 支持多租户的SaaS平台;

为何开源

工作中一直有个困恼:为什么身边很多项目后期维护时业务逻辑变的混乱不堪,service层代码变的庞大难以修改,维护成本也越来越高,有没有好的解决方式的?
后来接触到Eric Evans的DDD(Domain-Driven Design 领域驱动设计),发现这正是为了解决复杂业务而提出的思想。 但后来并没找到一套基于DDD应用的开源框架,因此决定自己从0开始投入研发。
现在1.0版本终于上线了,我们把这套框架开源出来想跟大家探讨并一起维护,希望今后有更多的项目和产品能使用这套框架。

技术选型

  • Springboot
  • Apache Shiro
  • Mybatis-plus
  • Alibaba Druid
  • Element-ui

主要模块

  1. 登录注册:账号、手机号验证登录,租户注册;
  2. 用户管理:用户新增,分配角色,禁用等;
  3. 角色管理:角色新增,查看,维护菜单等;
  4. 菜单管理:树形菜单管理,可配置菜单和按钮权限等;
  5. 租户管理:租户列表,禁用等;
  6. 操作日志:系统操作日志记录和查询;

项目结构

xtoon-boot
├─db                            数据库SQL脚本
│ 
├─xtoon-common                  公共模块
│    │ 
│    └─java 
│         ├─domain              领域通用类
│         └─util                工具类
│   
├─xtoon-api                     接口模块
│    │ 
│    ├─java        
│    │    ├─common              接口通用类
│    │    ├─util                接口工具类
│    │    └─web                 controller类
│    └─resources 
│        ├─static.swagger       swagger文件
│        ├─application.yml      全局配置文件
│        └─logback-spring.xml   日志配置文件
│ 
├─xtoon-sys                     系统子域模块
│    │ 
│    └─java 
│         ├─application         应用层
│         │    └─impl           应用接口实现
│         ├─domain              领域层(核心)
│         │    ├─factory        工厂
│         │    ├─model          领域模型
│         │    ├─repository     资源接口
│         │    ├─service        领域服务
│         │    ├─specification  规格校验
│         │    └─external       外部接口(防腐层)
│         ├─infrastructure      基础设施层
│         │    ├─repository     mybatis持久化类(应该都熟悉就不展开了)
│         │    └─external       外部服务类
│         └─facede              门面类层
│              ├─assembler      DTO转换类
│              ├─dto            DTO
│              └─impl           门面类
│   
├─xtoon-org                     组织架构子域模块
│            

核心理念

六边形理论

image

Alistair Cockburn提出了六边形架构,又被称为端口和适配器架构。观察上图我们发现,对于核心的应用程序和领域模型来说,其他的底层依赖或实现都可以抽象为输入和输出两类。组织关系变为了一个二维的内外关系,而不是上下结构。每个io与应用程序之前均有适配器完成隔离工作,每个最外围的边都是一个端口。基于六边形架构设计的系统是DDD追求的最终形态。

数据驱动和领域驱动对比

image

领域驱动设计与之前的系统设计开发过程有很大的不同:

  1. 就在于系统的参与角色,产品、开发、测试等,需要形成一套通用语言;
  2. 在于方案设计不再把db设计放在一个核心问题去解决,更加专注于业务模型本身,进行领域、业务聚合的设计,领域层的聚合及实体才是整个系统的核心内容;
  3. 真正的面向对象编程,由过程式的事务脚本方式,转变为真正的面向对象。

分层架构

image
  • 用户界面层(或表示层)
    负责向用户显示信息和解释用户指令。这里指的用户可以是另一个计算机系统, 不一定是使用用户界面的人
  • 应用层
    定义软件要完成的任务,并且指挥表达领域概念的对象来解决问题。这一层所负 责的工作对业务来说意义重大,也是与其他系统的应用层进行交互的必要渠道
    应用层要尽量简单,不包含业务规则或者知识,而只为下一层中的领域对象协调 任务,分配工作,使它们互相协作。它没有反映业务情况的状态,但是却可以具有 另外一种状态,为用户或程序显示某个任务的进度
  • 领域层(或模型层)
    负责表达业务概念,业务状态信息以及业务规则。尽管保存业务状态的技术细节 是由基础设施层实现的,但是反映业务情况的状态是由本层控制并且使用的。领域 层是业务软件的核心
  • 基础设施层
    为上面各层提供通用的技术能力:为应用层传递消息,为领域层提供持久化机制, 为用户界面层绘制屏幕组件,等等。基础设施层还能够通过架构框架来支持4个层次 间的交互模式
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容