ddd最大的问题之一就是术语的不统一,需求方案或业务人员与开发人员的术语无法对齐,特别是我们所说的逻辑对象与业务对象,而且最终是要转换成计算机能执行的语言,如何通打通业务方案及技术方案人员间的语言呢,这里就要用到业务界常说的:DSL(domain-specific language),而能为我们提供这种能力的我们会自然想到antlr组件。 利用DSL可以做到:
- 屏蔽逻辑对象与物理表间的差异(自动转换)
- 大家同一种语言
- 差异点通过技术来填平
- 技术人员不用直接面对物理表
下面是想法的实现图
1,还是使用mybatis组件去接收dsl
2,通过mybatis组件的插件拦截DSL并转换成SQL
3,mybatis拿到转换后的sql
4,mybatis检查sql后给db执行
所以这里的重点就是
1,如何用mybatis的拦截功能
这个如果对mybatis的功能比较清楚的,应当很容易实现,后面我再将这个实现单独做一个demo写出来。
2,如何实现转换引擎
这里纯粹的是使用antlr组件来实现转换,但很难实现所有的语法都没有问题,可能也只能实现一部分,后面会将demo放上来。