0.纹丝不忒
原创2022/6/20神翼首页大约 4 分钟
0.纹丝不忒

WingsBoot(代号神翼)是SpringBoot的一个脚手架,没有魔法和定制,主要有以下特点:
- 提供了多语言多时区真实的解决方案(动态语言包,时区,夏令时,闰秒)
- 提供了数据库版本和数据的版本管理(安全的表变更,安全的数据维护)
- 安排了一套保守约定和稳健工程实践(枚举类,配置文件,模板等约定)
- 解决了软件开发中最难的命名问题(允许使用中文命名,解决行业黑话)
- 英雄池很深,对技能有独到的理解(读3遍官方文档,debug部分源码)
- 不懂代码的看文档,都不看的,别用(这是你的homework,及格线)
其目标是使小创业团队,平稳的实现从单应用,到分表分库,到服务化的演变。 在任何项目阶段和业务规模下,能够,
- 安全快速的重构业务,变更数据模型
- 对业务和数据有版本管理,保证兼容性
- 运行时的数据变化亦可追溯,复盘,恢复
- 对抗业务变化快,设计不足的技术债务
0.1.版本号说明
从x01.x.x起,Wings版本号为标准的3段式,并且,
- 主版本 - 主要为工程的兼容,包括工程的主要依赖
- 次版本 - 主要为结构或框架性新增,防御性编译错误
- 修订号 - 包括功能的增强,选项及配置的增加
- 防御性编译错误 - 以编译错误代替运行时错误
其数值由基于SpringBoot(M.N.P)的开发版(m.n.p-SNAPSHOT)组合而成,
V = M*100+m.N*100+n.P*100+p-SNAPSHOT
因此,当Wings版本为300.201.1230-SNAPSHOT,那么,
- SpringBoot - 3.2.12
- Wings开发版 - 0.1.30-SNAPSHOT
但是,版本为x00.x.x,即wings开发版为0.x.x时,语义降级,
- SNAPSHOT相当于- path
- path相当于- minor
- minor相当于- major
Wings使用了revision和changelist的CI占位属性,Maven需要3.5.0以上。
0.2.项目结构
Wings由多个子项目构成,都采用了Dota有关的命名,主要包括以下,
- 沉默术士 wings/silencer - springboot的工程化装配,I18n等
- 虚空假面 wings/faceless - 数据层,分表分库,数据及库的版本管理
- 鱼人守卫 wings/slardar - Servlet体系的WebMvc基础约定和封装
- 术士大叔 wings/warlock - 综合以上的基础业务模块和功能脚手架
- 蝙蝠骑士 wings/batrider - RPC和微服化
- 演示例子 example - 集成以上的样板工程和例子
- 旁观阵线 observe - 生态内关联项目
- 天辉阵线 radiant - 开箱即用的插拔功能模块
0.3.技术选型
遵循Unix哲学,部分回答了为什么和为什么不?
- SpringBoot - 事实标准,从业人员基数大,容易拉扯队伍和技术衔接。
- Jooq/QueryDsl - 基于限制的艺术,看重其强类型而放弃流行的mybatis体系。 jooq强类型,可以受到IDE加持;不能写成过于复杂的SQL,有利于分库,分服务。
- Kotlin - 比scala更胜任更好的java,目前仅在flywave支撑性项目中用了kotlin, 而在主要业务场景,仍然主张【少吃糖,写好java】
- WebMvc - 尽管webflux在模型和性能好于servlet体系,但当前更多的是阻塞IO,多线程场景。
- Lombok - 简化代码,使用了Experimental功能,开发时,需要自己在pom中引入。
- Git-flow - git管理的最佳实践。
- Trunk-based - CI/CD的最佳实践。
- Guava, commons-lang3, commons-io - 进阶必备的工具包。
- ShardingSphere - 分表分库,足以解决90%的数据大的问题。
- Hazelcast - 相比于Redis,Hazelcast更简单,集成度更高。
- ServiceComb - 更工程化和更紧凑的
0.4.模块依赖
lib格式为依赖lib,否则为Wings模块或功能,无歧义时会简写,如curse, flywave等
- silencer ← mirana | boot-starter| Spring自动配置
- silencer-curse ← silencer | aop| Wings基本功能
- faceless ← curse | meepo | jdbc| 类型主键
- faceless-codegen ← faceless-jooq | jooq-codegen| 代码生成
- faceless-flywave ← faceless | kotlin| 版本管理
- faceless-jooq ← faceless-awesome | jooq| Jooq定制
- faceless-shard ← faceless-awesome | shardingsphere| 分表分库
- slardar ← curse | jackson|fastjson|okhttp|cache|sentry| 业务基础
- slardar-hazel-caching ← slardar | hazelcast| 多级缓存
- slardar-hazel-session ← hazel-caching | slardar-webmvc | 分布式会话
- slardar-webmvc ← slardar | starter-json|starter-web|undertow|security-web|springdoc| Web增强
- slardar-sprint ← hazel-caching | hazel-session | slardar-webmvc | starter-security|starter-actuator|boot-admin| Web集成
- warlock ← slardar | faceless-jooq | Db基础
- warlock-codegen ← warlock-awesome | faceless-codegen | flywave
- warlock-shadow ← slardar-sprint | warlock-awesome | JustAuth| Db|Web|权限
- warlock-bond ← warlock-shadow | auth-perm体系
