对于多子系统的web架构,让后端每个系统能够独立部署且jar包能相互引用,就想到了用maven父子工程,其架构该如何设计,接口之间的调用该如何封装,有没有好的建议
是否可以按controller、service、dao,csd这套来拆分,对应系统的csd逐级依赖,然后加上各个系统的主包system-c系统、system-l系统这样的,像spring boot启动项就放在对应系统主包下面,每一个都是maven子工程,每个csd子工程下面都包含对应的common公共包和对应子系统,如下图,是否还有其它补充,跨系统之间的接口调用如何维护
没必要拆的太细,跨系统之间的接口调用
1.使用HTTP, 你的模块可以提供类似于
Feign
的client
即可,包含出入参的序列化和反序列化,由于是HTTP,各种语言之间调用也很便捷,甚至可以不共享模块2.使用RPC,常见的是Dubbo, SOFA-RPC等,也是需要提供接口和出入参对象
一般情况下,划分模块都是统一parent模块,一个core模块,一个Facade模块,这三个是各个系统共享的,其他的都是各系统独立的,公共的出入参对象和RPC/HTTP封装,全部放Facade模块就可以。
要想达到系统极简,抽象合理,还是要在包管理上下功夫
1.父模块统一管理依赖版本
2.共享模块不传递三方依赖,依赖可选化
3.模块依赖最小化,不用则不引入,优先考虑标准包,例如: 使用
commons
工具里,而不是Spring的工具类,使用Java SE的注解,而不是Spring的注解,暴露模块@Autowire
用@Inject
替换等