我曾在2021年年初的时候承诺过要将myddd-vertx开源。
选日不如撞日,2021年也快接近尾声了,刚好今天是程序员日,myddd-vertx源代码正式开放。
1. myddd-vertx是什么
myddd-vertx是myddd的一个子模块。
myddd-vertx是基于Kotlin与Vertx的响应式领域驱动基础框架。它是myddd在后端的实现。
myddd-vertx是myddd在后端的大胆尝试 ,myddd-vertx遵循以下宗旨:
- 以响应式编程为核心。在响应式框架中,选择Vert.x做为核心依赖框架。
- 以Kotlin取代Java,Kotlin比Java更简洁与优雅。
2. myddd-vertx技术选择
myddd-vertx的核心技术选型为:
- 编程语言:Kotlin
- 响应式框架:Vert.x
- 数据库框架:hibernate reactive
- 依赖注入基础框架:Google Guice
- 单元测试:JUnit
- 管理与构建:Gradle
如果你想知道为什么我会选择kotlin vert.x,可以访问附录中的文章以了解更多。
3. myddd-vertx与测试驱动
myddd-vertx严格遵照TDD测试驱动开发。使用SonaQube来进行质量管理。
对于每个正式release的版本,要求达到:
- 单元测试覆盖率不低于80%
- Bus,Vulnerabilities,Debt,Code Smells等尽量减少至个位数直至没有
当前数据
4. myddd-vertx与推定架构
myddd-vertx是基础框架,它是对DDD领域驱动理念的实践,在架构风格上并没有限定使用方式。考虑到需求各有不同,myddd-vertx推荐以下三种推定架构:
- 单体架构
如果你的一些需求很明显不存在极大的并发量或高可用,那myddd-vertx的单体架构是非常适合的。
这种架构模式下,最终会以Jar的形式部署。
基于vert.x极高的性能表现,就算是在这种架构模式下,依然有着优秀的性能表现。从我实际的性能测试表现上来看,至少是传统Spring Boot的6-8倍的优势。
- 单体 集群部署架构
这种是对单体架构的扩展,如果你的架构在并发上,或是特别在高可用上有需求,那在单体架构的基础上,添加nginx或lvs为负载均衡的集群是最合适的选择。
相比单体架构,它有着以下几个优势
- 性能水平可以水平扩展
- 支持高可用,单个服务当机不会影响服务的可用性
事实上,我们推荐你主要考虑使用这个模式,除了TO C互联网以外的大部分情况下,我们认为这种架构足以胜任。
- 微服务架构
微服务是近年来非常流行的一种架构。
myddd-vertx的支持的微服务架构是: Vert.x gRPC Event Bus事件总线 单机/微服务双部署支持
有关此架构,访问myddd github中的myddd-vertx-micro-scaffold示例项目以了解更多
5. myddd-vertx的优势与不足
优势
- 得益于kotlin这个号称better java的语言 ,使得myddd-vertx代码非常简洁与优雅
- 得益于vert.x响应式框架,其性能远优于传统的Spring Boot类似的线程同步模式
- 结合kotlin协程,使用asyn/await,极大的减轻异步编程的阻力
不足
- kotlin在流行度上远不如java
- vert.x在流行度与远不如Spring Boot
6. myddd-vertx与myddd-java
考虑到技术的非主流性与异步编程带来的挑战,也许使用myddd-vertx对你来说并不是个好的方案。
没有关系,myddd仍然有基于Java及Spring Boot的领域驱动基础框架供你使用。
myddd-java
myddd-java是基于Java及Spring Boot的领域驱动基础框架。
myddd-java始终坚持以下两个原则:
- 最大化的倡导ddd编码风格与模式
- 把支持Spring Boot做为第一要务 Spring Boot全家桶技术,已成为中小企业,个人开发者开发的主流选择。选择支持Spring Boot,也是期望为更多的人与团队服务。在不影响他们的整体架构的选型下,更好的推广与传播DDD
7. myddd starter
我已经开发了一个快速生成myddd项目的代码初始化工具。这就是myddd starter,官网是: https://starter.myddd.org
通过myddd starter,你可以在数秒内生成一个myddd项目。
myddd starter
myddd starter当前支持以下维度的项目生成
- myddd-vertx 基于Kotlin与Vert.x的响应式领域驱动项目,用于后端开发
- myddd-java 基于Java与Spring Boot的领域驱动项目,用于后端开发
- myddd-web 基于TypeScript与React的领域驱动风格的前端项目,用于前端页面开发
- myddd-electron 基于Electron跨平台技术及TypeScript与React的桌面开发,用于跨平台桌面开发
8. myddd官网
如果你对myddd有兴趣,可以随时访问myddd的官网:
https://myddd.org
同时,你也可以关注我的公众号: 微言码道
随时欢迎任何人积极的反馈与建议。可以发送邮件至lingen.liu@gmail.com