请问一下,同一个功能,不同客户有微小的需求不同,导致一个系统一个客户,或者同个系统里面为了区分不同客户if else一大堆,维护工作量非常大,怎么样优雅从业务平台架构去设计这个系统,
实现一个业务平台可根据不同业务需求做二次开发,公共业务出现差异化时,可扩展差异部分,实现完美平台化,请大家帮忙头脑风暴一下,或者是否有现成的系统已实现我的困扰。谢谢
目前我想到的有:
1、模块可插拔,把一个功能拆分成各个小模块,二次开发小模块可以替换,通过配置实现不同客户的需求,从技术上可以用java的spi机制。
2、实现小模板块拼装成大模块,但如果模块之间数据的流转,配置设计很复杂,A模块的输出要成为B模块的输入,配置没有好的方案,同一业务各小模块修改数据库同一条数据时,为了提高性能怎么保证只操作一次数据库。
更新了下,你看看
将各种需求用借口写,需要什么连接什么
1:你的系统有着不同的使用者,然后你说一大堆if-else,诚然,这样几乎和优雅与设计丝毫不沾边,借鉴现在的一般做法,应该是在请求接口的同时带上一个可以标示用户身份的字段,这个字段一定要能够标示用户的身份,确保用户调用到需要调用的接口。
2:上面提到了,用户的身份不同需要调用不同的服务,所以你在真正的服务层之前搞一个适配的东西,这样的话,保证服务能正确寻址。而常规做法一般采用nginx或者web应用。
3:你想到了数据的一致性问题,但我想,接口拆分的粒度不要太细小,否则你会疲于奔命。
一个数据库的一条数据最好只是一个接口操作,否则很难保证数据一致性。
4:落地点在哪里,就在底层的接口。底层接口该如何搭建呢?
底层的接口采取webservices使用http协议暴露出来,将所有的业务分拆开来,做好领域模型的划分。
能做好上述四点,你就基本能设计出来一个扩展性不错的系统,但是任何系统的进步都是不断演化的过程,不可能一次性成型。
最近在做关于webservices的项目,有兴趣的话可以看看:
https://github.com/wangmeng1314/BaseWebServices
我叫阿福,希望我的回答对你有帮助!
如果有精力可以搞搞服务化!
接口之间相互调用可以采用dubbo
当然,接口提供出外面采用webservices(spring-mvc)
我的qq:943065465
可以加我详聊