基于模块化的软件架构设计
引言:随着互联网软件产业的高速发展,软件产品呈现出复杂化、多功能化趋势,随之而来的是软件代码量及功能模块剧增,如果软件的结构与层次设计不清晰,会极大降低开发效率,影响软件产品质量。本文通过分析软件模块化设计的优势与思想,研究设计一种软件模块化设计方案,该方案以微服务架构为基础,将软件从整体到部分进行层次划分,极大降低软件内部的耦合度,提高软件开发质量和效率。
关键词:软件设计,模块化,微服务
1.引言
随着软件工程发展,人们对软件的需求也不断增加,为满足客户的动态需求,软件编程思想也随之而变化,结构化编程、面对对象编程、com编程、微服务等一系列思想均是追求将软件进行模块化,把软件开发变为搭积木形式以完成复杂的功能,提高软件代码的扩展性。由此软件模块化设计的相关研究逐渐成为业界关注的热点,软件模块化在软件设计中的应用也越来越广泛。
2.模块化设计概念
2.1模块化设计概念
软件模块化设计(modular programming)源于分工思想,是指在进行软件设计时根据软件所需的功能将软件划分为若干相对独立的功能模块,每个模块只需要完成一个确定的任务,不需要关心其它功能模块的实现方式与过程,一个模块对于其它模块就是一个可以实现特定功能的“黑盒”程序,模块需要制定对应自身功能的调用接口,模块与模块之间通过调用对方接口来建立必要的联系,并通过相互协作实现整个软件的需求。
2.2模块化设计优势
(1)控制程序设计的复杂性
  软件模块化设计对软件整体进行层次划分、对功能进行模块划分,使软件整体结构更加清晰。在进行程序设计时,不同的层次做自身应该做的事情,在设计系统架构时,可针对不同的层次的需求选择对应优势框架,使程序设计的条理标准化,提高后期开发效率。
(2)提高代码的重用性
  模块与模块之间是相对独立的,每个模块只实现单一的功能,可以将模块看做一个独立完整的小程序或者项目,可在多个项目中使用,使用时只需要根据所制定的接口规范调用即可。即保证代码的一致性,也减少代码编制工作量。
(3)易于维护升级和功能扩充
  随着软件复杂度提高,在软件后期的维护中,问题定位是首先需要考虑的问题,当软件结构设计混乱时,问题定位的成本将大大提高。软件模块化设计将各业务模块间解耦,使模块之间没有依赖关系,在进行问题定位时可以对单独模块进行单元测试,只需要使用测试工具根据相应的接口测试是否得到预期的结果来定位问题所在。在软件迭代升级中,因为功能模块的重用,所以仅需要对对应的模块进行迭代,所有调用该模块的业务逻辑都会得到相应的变化,极大减少了维护成本。在持续的需求增加与功能扩充时,开发人员可根据需求编制相应的功能模块,制定并暴露出对应的接口,如插件般对软件进行动态功能扩充。
(4)有利于团队开发
  在软件需求调研后,将软件需求进行定性划分成多个模块,团队间可以根据模块功能的难
易和次要程度进行任务分配,每个团队负责不同的模块,因为每个模块实际上也是一个完整的项目,可以进行单独编译、调试。
2.3模块化设计思想
(1)模块内聚度
内聚度是指一个模块内部各成分结合的紧密程度,即度量一个模块完成自身特定功能的能力,是判断一个软件设计质量的标准之一。按照内聚强弱程度可以分为7种类型:偶然内聚、逻辑内聚、时间内聚、通信内聚、顺序内聚、过程内聚、功能内聚。功能内聚指模块内所有的元素共同完成一个特定的功能,是内聚度最强的内聚。
在进行软件模块设计时应该尽可能的提高模块内聚度,提高模块内聚度可以使模块功能透明清晰,从而获得较高的模块独立性,有益于问题定位与维护升级。
(2)模块耦合度
耦合度是指模块与模块之间关联的紧密程度,即度量模块之间的依赖度。按照耦合强弱程度
可以分为7种类型:非直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合、内容耦合。非直接耦合指两个模块之间只通过主模块的控制和接口调用来实现联系的,没有直接关系,模块独立性最强。
与内聚相反,在软件设计时应尽量追求松散耦合的系统,理想上希望模块之间表现为非直接耦合,减少模块之间的联系,以追求模块的代码复用和运行稳定,达到提高开发效率和保证软件质量的目的。
3.基于微服务的软件模块化设计实例
以一个基于微服务架构的系统设计实例阐述模块化设计方法,通过层次划分和模块划分两种方式对系统进行设计,层次划分对整个系统进行架构划分,模块划分对系统的功能进行具体细分。
图1 软件架构层次划分
如图1所示,可将整个系统架构分为三层前端层、后端层、数据存储层。
前端可分为视图层(Page层)、业务层(model层)、请求层(service层),视图层负责界面的样式展示和数据状态读写,是用户交互层;业务层负责处理业务逻辑,数据状态的变换和暂存;请求层负责与后端接口对接,进行前后端数据的传输交换。
后端可分为控制层(controller层)、服务层(service层)、数据访问层(mapper层),控制层负责请求转发,接受前端传输数据后转发给服务层,接受服务层返回值后传输给前端;服务层可分为接口层与实现层,主要负责系统业务逻辑的实现和封装;数据访问层对数据库操作进行持久化,负责与数据库进行数据交换的任务。
数据存储层负责存储系统数据、文件。
图2 软件功能模块划分
通过软件层次划分得到清晰的结构后再对相应层次进行功能模块细分。如图2所示,以后端层为例,根据业务需求将该层次分为六个基础模块,分别是网关模块、系统模块、业务模块、通信模块、工具模块、文件服务模块。常用微服务架构
网关模块:为系统提供统一访问入口,负责用户登录统一认证功能,将前端发起的请求根据策略转发到不同的功能模块。
工具模块:将系统常用的加密、操作文档、http、全局异常捕获等工具类抽离为工具模块,
其他所有模块可以通过依赖引入的方式调用所需要的工具类,避免重复实现。
系统模块:将系统的基础业务抽离为系统模块,如用户模块、角模块、权限模块、部门模块、字典模块等,将系统模块作为系统的公共模块,在其他项目中可以直接通过通信模块访问系统模块接口,将系统模块集成。
通信模块:通信模块将系统模块中的数据模型抽离,业务模块可以通过引入通信模块获得系统模块的数据模型,即避免数据模型的重复声明,也降低系统模块与业务模块之间的耦合度。通信模块将系统模块的接口暴露给业务模块,业务模块可通过接口访问系统模块。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。