软件工程师,对比其他工程师有更自由,软件开发的自由,调用的东西可以迅速调用,迁移重构的成本很低,是其他工程所不能比拟的,但也因为这一点,内部耦合十分严重。
耦合度: 耦合是两个或多个模块之间的相互关联。在软件工程中,两个模块之间的耦合度越高,维护成本越高。因此,在系统架构的设计过程中,应减少各个模块之间的耦合度,以提高应用的可维护性。
软件工程主要有以下几点耦合:
1.功能和功能的耦合(最常见的耦合)
2.人和人的耦合(具有猜疑链)
3.现在和未来的耦合
但是解偶并不是目的,而是一种过程
解偶虽然能降低系统的复杂性,可以让我们更容易的去理解和实现,但是会有性能上的损失,所以会重新建立耦合起来来增加性能,其实我们就是需要取舍,找到合适的平衡点
解偶三大工具:模块化、分层化、模式化
模块化:高内聚低耦合:模块和模块之间的耦合尽量要低,同时模块内间耦合的要尽可能的紧密,更多的是技术上的分层(功能和功能之间的解偶)
分层化:分层化的第一优先级是功能的完备性,更多的是对上层的需求要进行分析和了解,更多的是业务上的分层(人与人之间的解偶,需求和实现之间的解偶)前端和后端就是一个分层化的一个例子
模式化: 设计模式
(现在和未来之间的解偶)
对称破缺:当一个系统处于一种什么都有可能的状态的时候,也就是对称性高,对称性高往往也是处于一个不稳定的临界状态,所以它会自发性的从这个状态退出,从一个万事都有可能变为朝一个方向前进(就比如单细胞生物进化成多样性的生物种类)软件开发就不一样了,我们可以人为的选择对称破缺的方向,而下面就是一些常见的对称破缺的方向
对称破缺的方向:领域驱动设计,敏捷开发,开源
领域驱动设计:(以业务领域作为核心驱动力)
1.mvc,mvvc,
2.微服务:对业务,包括核业务对模块化的方法
3.中台
敏捷开发 :(追求极致的响应需求)(需求和开发的解偶)
为了市场的多变性,它放弃了从需求到实现这个维度上的解偶,可以让从需求到实现这个过程更高效,开发的周期更短,
开源: (最求极致的性能,复杂性换性能)
相当于生态系统,运用整个生态系统的多样性去对抗复杂性
\