业务功能性
模块,组件,类,三种层次的定义
系统设计的关键所在
- 可扩展
- 解耦
- 高并发
- 高性能
- 横向扩容
- 高可用
其中1-2为了解决复杂业务,3-6为了解决业务增长问题
耦合
上图就是一种耦合,模块A的代码内方法直接去访问模块B中的一个方法。关于这种调用我们也可以称为具象调用。
引入一个概念:越抽象越趋于稳定,越具象越趋于紊乱。
解耦实现
1.面向接口编程
接口是常用的解耦方式也可以称为抽象调用,只要接口稳定,实现代码随意改动不影响调方代码。
但是这种方式有一个致命改动就是接口变动。如上图IA接口变动所有调用IA的地方均需改动。当然可以利用适配器设计模式来加强接口稳定性。
缺陷:接口稳定性难以保证,接口一旦变动,相关业务逻辑代码均需要修改。
2.消息编程
假设A模块要调用B模块的功能,但是又不去调B的任何函数,甚至模块可以直接摘掉,也不影响系统运行,仅仅是缺少了这部分功能而已。
就像火车一样,摘下来一节车厢装上去一节车厢,火车都可以正常运行。
如上图所示,A要去调B的功能具体实现步骤如下,此过程仅仅说明了单次调用,没有进行返回参数的回写。(原理相同,在进行一次领域模型写入,与消息传递即可)
- A模块先将传入参数保存到领域模型内
- 将调用消息上载到消息中心
- 消息中心将消息调用推到B模块
- B模块去获取领域模型,至此完成参数传递及调用