DDD微服务框架:xtoon-cloud
xtoon-cloud
基于领域驱动设计(DDD)并支持SaaS平台的微服务开发框架.
码云源码:https://gitee.com/xtoon/xtoon-cloud
为何选择xtoon-cloud
- 解决编写过程式和事务代码,造成后期维护逻辑混乱、维护成本高的痛点;
- 边界规范易维持,核心业务逻辑内聚在领域内,低耦合,高内聚,易于长期维护;
- 网上基本讲的都是DDD的理论很少有讲怎么落地,xtoon-cloud提供了完整落地方案和企业级微服务架构;
- 可以快速开发,框架提供了系统管理和组织架构等核心模块;
- 支持多租户的SaaS平台;
技术交流
如果有什么问题或建议可以 提ISSUE 或 加群(QQ:130950009),交流技术,分享经验。
如果你解决了某些bug,或者新增了一些功能,欢迎 贡献代码,感激不尽~
大家多点 ⭐Star 支持下。
技术选型
- 基础框架:Spring Cloud Alibaba
- 网关:Spring Cloud Gateway
- 鉴权认证:Spring Cloud Security+JWT
- 服务监控:spring-boot-admin
- 流量控制:Sentinel
- 注册配置中心:Nacos
- RPC:dubbo
- mybatis-plus
主要模块
- 登录注册:账号、手机号验证登录,租户注册;
- 用户管理:用户新增,分配角色,禁用等;
- 角色管理:角色新增,查看,维护菜单等;
- 菜单管理:树形菜单管理,可配置菜单和按钮权限等;
- 租户管理:租户列表,禁用等;
- 日志管理:记录操作日志记录和查询;
项目结构
xtoon-could
├──doc 文档
│ ├─db sql
│ └─yaml 配置文件
│
├─xtoon-common 公共模块
│ ├─xtoon-common-core 核心公共模块
│ ├─xtoon-common-log 日志公共模块
│ ├─xtoon-common-mybatis mybatis公共模块
│ ├─xtoon-common-redis redis公共模块
│ ├─xtoon-common-swagger swagger公共模块
│ ├─xtoon-common-tenant 多租户公共模块
│ └─xtoon-common-web web公共模块
│
├─xtoon-ops 运维服务
│ ├─xtoon-auth-server 认证服务
│ ├─xtoon-gateway-server 网关
│ ├─xtoon-monitor-server 健康监控服务
│ ├─xtoon-register-server 注册配置中心
│ └─xtoon-sentinel-server 流量控制
│
├─xtoon-service 业务服务
│ └─xtoon-sys 系统管理领域
│ ├─xtoon-sys-interface 系统管理接口
│ └─xtoon-sys-server 系统管理服务
│
部署
部署方式
- 拉取前后端项目代码;
- 安装必要的环境:jdk1.8+,mysql5.7+,redis,nodejs等;
- mysql新建两个库,导入doc下面的sql文件;
- 修改成本地环境配置:mysql,redis;
- 启动前后端项目,访问地址;
启动顺序
- xtoon-register-server(注册配置中心)
- xtoon-sys-server(用户服务)
- xtoon-auth-server(认证服务)
- xtoon-gateway-server(网关服务)
- xtoon-monitor-server(监控服务)
- xtoon-sentinel-server(流量控制服务)
- xtoon-could-element(前端项目)
核心理念
六边形理论
Alistair Cockburn提出了六边形架构,又被称为端口和适配器架构。观察上图我们发现,对于核心的应用程序和领域模型来说,其他的底层依赖或实现都可以抽象为输入和输出两类。组织关系变为了一个二维的内外关系,而不是上下结构。每个io与应用程序之前均有适配器完成隔离工作,每个最外围的边都是一个端口。基于六边形架构设计的系统是DDD追求的最终形态。
数据驱动和领域驱动对比
领域驱动设计与之前的系统设计开发过程有很大的不同:
- 就在于系统的参与角色,产品、开发、测试等,需要形成一套通用语言;
- 在于方案设计不再把db设计放在一个核心问题去解决,更加专注于业务模型本身,进行领域、业务聚合的设计,领域层的聚合及实体才是整个系统的核心内容;
- 真正的面向对象编程,由过程式的事务脚本方式,转变为真正的面向对象。
分层架构
- 用户界面层(或表示层)
负责向用户显示信息和解释用户指令。这里指的用户可以是另一个计算机系统, 不一定是使用用户界面的人 - 应用层
定义软件要完成的任务,并且指挥表达领域概念的对象来解决问题。这一层所负 责的工作对业务来说意义重大,也是与其他系统的应用层进行交互的必要渠道
应用层要尽量简单,不包含业务规则或者知识,而只为下一层中的领域对象协调 任务,分配工作,使它们互相协作。它没有反映业务情况的状态,但是却可以具有 另外一种状态,为用户或程序显示某个任务的进度 - 领域层(或模型层)
负责表达业务概念,业务状态信息以及业务规则。尽管保存业务状态的技术细节 是由基础设施层实现的,但是反映业务情况的状态是由本层控制并且使用的。领域 层是业务软件的核心 - 基础设施层
为上面各层提供通用的技术能力:为应用层传递消息,为领域层提供持久化机制, 为用户界面层绘制屏幕组件,等等。基础设施层还能够通过架构框架来支持4个层次 间的交互模式
单体应用版:https://gitee.com/xtoon/xtoon-boot
5 声望
0 粉丝
推荐阅读
Spring事务传播行为详解
Spring在TransactionDefinition接口中规定了7种类型的事务传播行为。事务传播行为是Spring框架独有的事务增强特性,他不属于的事务实际提供方数据库行为。这是Spring为我们提供的强大的工具箱,使用事务传播行可...
JerryTse赞 242阅读 122.6k评论 97
一文搞懂秒杀系统,欢迎参与开源,提交PR,提高竞争力。早日上岸,升职加薪。
前言秒杀和高并发是面试的高频考点,也是我们做电商项目必知必会的场景。欢迎大家参与我们的开源项目,提交PR,提高竞争力。早日上岸,升职加薪。知识点详解秒杀系统架构图秒杀流程图秒杀系统设计这篇文章一万多...
王中阳Go赞 32阅读 2.4k评论 1
计算机网络连环炮40问
本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~
程序员大彬赞 14阅读 1.7k
万字详解,吃透 MongoDB!
MongoDB 是一个基于 分布式文件存储 的开源 NoSQL 数据库系统,由 C++ 编写的。MongoDB 提供了 面向文档 的存储方式,操作起来比较简单和容易,支持“无模式”的数据建模,可以存储比较复杂的数据类型,是一款非常...
JavaGuide赞 8阅读 1.6k
花了半个小时基于 ChatGPT 搭建了一个微信机器人
相信大家最近被 ChatGPT 刷屏了,其实在差不多一个月前就火过一次,不会那会好像只在程序员的圈子里面火起来了,并没有被大众认知到,不知道最近是因为什么又火起来了,而且这次搞的人尽皆知。
Java极客技术赞 12阅读 3k评论 3
数据结构与算法:二分查找
一、常见数据结构简单数据结构(必须理解和掌握)有序数据结构:栈、队列、链表。有序数据结构省空间(储存空间小)无序数据结构:集合、字典、散列表,无序数据结构省时间(读取时间快)复杂数据结构树、 堆图二...
白鲸鱼赞 9阅读 5.2k
如何选择适合你的微服务 API 网关:对比 Kong、APISIX、Tyk、Apigee 和其他网关
API 网关并非一个新兴的概念,在十几年前就已经存在了,它的作用主要是作为流量的入口,统一的处理和业务相关的请求,让请求更加安全、快速和准确的得到处理。它有以下传统的功能:
API7_技术团队赞 8阅读 8.6k评论 2
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。