身边的朋友喜欢分层架构,看到的一张张图都是分层的。分层从哪来的?
一个比较大的可能是受TCP IP 协议分层形式影响。学过网络基础课程的都应该对七层网络模型有印象。这个模型有点误导,咋看上去是层次结构,上层依赖下层,这么经典的体系结构都分层了,自己做的小破应用也应该向经典看齐,结果导致这种分层泛滥。
仔细理解七层网络模型,他描述的是协议实现软件吗?不是滴。这个模型说的是数据传输过程的层层封装,上层的数据被下层封装,不是协议软件的结构。
那协议软件的结构是什么样的?是分模块的,模块间有依赖关系。有哪些模块呢?一层一个模块,相邻层的模块有依赖关系。我没有在耍你,也不是在玩文字游戏。重点是处理上层逻辑的模块不依赖处理下层逻辑的模块,而是相反,下层依赖上层。没错,就是依赖倒置。举个例子。传输层依赖网络层吗?是的,传输层依赖网络层进行数据报文传输。但是,传输层依赖网络层的具体实现吗?传输层需要知道是IP数据报还是X.25?不需要,传输层只要定义网络层的抽象接口就好了。所以说网络层依赖传输层的抽象接口,下层依赖上层。
如果层层都是这样的关系,到底分成多少层重要吗?是否分层还重要吗?一点都不重要,完全没必要被层次的形式束缚。只要把职责垂直切分,形成模块,模块依赖另一个模块的抽象,你就获得灵活的结构。相反,受制于层次结构的束缚,硬生生的水平切分,你的到的永远是支离破碎的,僵化的结构,你永远无法说清层次间的边界,还会时不时地在层次间到处塞小层次。
如果你的层次里出现了core,manager,domain的字样,恭喜你,你在做水平切割的层次,好好跟小伙伴解释什么是core,什么不是core吧~~