软件模块化设计

  互联网产品迭代速度极快,人员变更频繁,对底层承载业务的系统带来的影响则是:一个系统可能会有成百人在改造它,一个系统糅合了 N 多人的编程思想,然而每个人的编程风格不同、设计理念不同,这些差异性会导致系统的可读性变差、可维护性降低,新增业务的成本变高。而模块化就是根据属性或者特性将程序分割成一个个有良好定义的边界的组件,同时附带有相对详细的文档说明,从而在某种程度上减少程序的复杂性。

  一般来说模块化后的程序组件可以单独开发、编译并相互联系。组件内的细节只对改组件内的代码展示,而其他组件只能看到该组件明确公开的部分。模块化的最终目标呢就是减少维护成本。就比如我们常见java类 其实就是模块化的体现,他对自身的代码细节很完善,但是对外我们只能看到一些公开参数。

  模块化也并非是非常方便的模式,当遇到一些较大的项目时,我们不能对项目模块化的特别细致,因为这样会导致系统膨胀的异常巨大,只能根据一些比较大的特性来进行系统性的模块化,比如对 游戏 这个模式进行分割,我们不可能单独分割成欢乐斗地主、麻将、和平精英等等等等,我们只能将其分化为 休闲游戏、射击游戏之类的,如果分的太细,又导致系统庞大带来了一定的复杂性。系统开发中我们常见的mvc模式就是这样的例子。

  我们如何来对业务进行模块化呢?一般分为以下步骤

  1.分析问题,明确需要解决的任务,对问题进行归类和抽象。

  2.对任务进行逐步分解和细化,分成若干个子任务,每个子任务只完成部分完整功能,并且可以通过函数来实现

  3.确定模块(函数)之间的调用关系

  4.优化模块之间的调用关系

  5.在主函数中进行调用实现

  在模块化设计中,归类和抽象是最为重要的思想,那么什么是归类和抽象呢?举个例子,我们在一个系统中,可以将上传文本和上传图片统称为上传,这叫归类;上传文本是只允许上传文本类文件,上传图片是只允许上传图片格式的文件,这叫抽象。通过归类和抽象后,我们再进行开发 文件展示、文件维护 时 我们又可以对不同的模块进行联系划分,有了文件维护,文件才能展示,这样对文件功能区的调用关系就进行了明确化,同时开发程序是对应的调用关系也得到了明确。通过这些关系呢,我们可以归结出一张联系图,后续的新的需求我们也可以根据归类和抽象和联系图进行比较,分析出是属于哪个部分的需求。

  模块化的五个基本特征

  1.层次分明,可以理解为设计一个层级分明的树状结构

  2.抽象和细分,抽象就是对需求进行分析,不考虑实现部分,细分就是对需求进行逐级分级,对上一部分添加一定的细节

  3.组成独立,除了必要的接口,尽量减少模块间、分系统、子系统之间的逻辑依赖,这样在后期进行维护升级时,就可以不用干涉其他不相关的部分

  4.面向数据结构

  5.高内聚,低耦合

 

原文地址:https://www.cnblogs.com/mokpiet/p/13861854.html