论层级结构和模块划分
在软件开发过程中,我们经常会需要面对框架的选型,特别是在软件刚开始设计的时候,我们必须先选择一个整体架构,那就是我们要按照需求特性进行模块划分,还是按照功能逻辑进行层级划分。或者说,我们是要进行纵向的切分还是横向的拉伸。
两种框架有什么区别呢?所谓模块划分,就是按照软件的需求和功能分开,这样就可以把不同的模块进行解耦,更方便开发人员开发和维护;不过劣势就是对于不同的模块,可能会都要写一个数据层,这样就会导致代码的重复利用率低。而层级划分,则是把软件代码按照逻辑分层,比如分为数据层,网络层,界面层等,这样的好处就是不同层级之间相互分离,使每一层的代码复用度都比较高,但是也会导致模块间的耦合性也会比较高。
可以说两种框架都有自己的好处和劣势,那么我们在实际中应该如何选择呢?其实也是有方法的。
对于一个特定功能的软件,也就是需求基本确定的软件,那么我会建议使用层级结构,因为需求已经基本确定,那么解耦的必要性就没有那么高,而代码的复用度就显得比较重要,使用层级结构可以更方便大家快速的完成功能开发工作。
而对于一个需要迭代更新的软件,我更建议使用模块化的软件结构,因为模块间的解耦,会让后面添加新需求时事半功倍,如果使用了层级架构,则会导致每一层级的代码都需要修改。
当然,两者也并不是完全矛盾的,在一个大型软件的架构中,我们可能既需要层级划分,又希望能够模块化解耦,那么我们应该怎么做呢?
首先,要分层级,把基础的层级作为一个模块进行开发;然后,把非基础的层级,按照特性需求进行模块划分,从而实现模块间的解耦。当然,实际中并不像我说的这么简单,但是基本上也是这么操作的,主要就是要利用一些设计模式(如反射,代理等)实现模块的解耦。
在真实的开发中,其实还有一个简单的方法进行区分,那就是小软件使用模块化,大软件进行层级划分,主要就是因为小的软件一般会更新迭代较快,需要解耦便于快速开发;而大软件,则是为了减少代码量,提高代码复用率,会先进性层级划分,然后在每一层内再进行模块化,来提高开发的效率和性能。