怎样将系统模块化

怎样将系统模块化

摘要:

《怎样将系统模块化》一文阐述了系统模块化的重要性,应遵守的高内聚低耦合的原则。以及经常使用大粒度的划分方法,并对一些原则进行了对应的补充说明。当然要编写出高质量的软件程序。还须要理清需求,把控好设计,使用恰当的技术,处理好业务逻辑。编写高质量的代码,更须要一遍又一遍的重构改进

废话:非常久没有写代码了。也非常久没有从事软件开发设计的工作。想想之前设计编写代码日以夜继的日子,还是蛮怀念的~近期在带领人员做一些项目的时候,发现开发出来的软件可改进的空间还是蛮大的,如系统模块划分不清。代码编写质量不高等,当然要编写出一个好的程序不是一件easy的事。须要理清需求,把控好设计。使用恰当的技术,处理好业务逻辑,编写高质量的代码。更须要一遍又一遍的重构改进.

当然追求完美,本身就不完美,绝大部分的情况下,也没有充足的时间同意这样做。只是追求完美的心态还是值得肯定的,不然也没有动力改善自身的技能水平,若能有经验的长者加以引导,少走一些弯路。那对人员的成长大有裨益。当然修行还是靠自身。

提升自我,正视自我的不足,也会使得人员备感压力,值得欣慰的事。人员还是挺上进努力的。仅仅是任重道远,简言之,革命尚未成功。同志还需努力!

扯远了。回正题,这里先将软件需求以及代码编写质量的内容暂且置于一旁,这些也非三言两语所能说完,况且自身的修为也不够。这里还是集中精力重点说下系统模块化的划分,顺便也借此温故而知新:

系统模块化的重要性:

对于绝大部分的项目而言,系统模块化的重要性不言而喻。一个良好的模块划分能够使得系统。具有下面优点:

1. 更高的可靠性,将系统划分成一个个相对独立的模块,有利于开发者缩小问题域,集中精力解决单一模块存在的各种问题异常,通过局部改进,终于使得软件的可靠性得以改善.

2. 更稳定的结构,遵循高内聚低耦合,将不同领域的模块分隔开来,并保留简单高效严谨的通信接口,可以有效的避免一个功能模块的问题扩散到还有一模块

3. 更强的维护性,良好的结构划分。清晰的代码逻辑,具有更好的可读性。便于开发者理解维护

4. 代码可重用性更强,系统模块化可以使开发者更好的理清业务逻辑结构,提取出公共的模块。从而提高代码的可重用性

5. 缩短项目开发周期。採取分而治之的策略,分块解决这个问题。使得问题更易于处理。且更加可控,降低问题处理重复所投入的不必要时间

系统模块化的原则

依据软件设计的模块化。抽象。信息隐藏和局部分等原则,能够得出模块化的独立性概念。所谓模块独立性,即模块内部逻辑相对独立完整单一。模块间联系尽可能少,详细表现为高内聚低耦合。

符合高内聚低耦合的模块,通常功能完整独立,数据接口简单,程序易于实现。易于理解维护,同一时候也限制了错误的作用范围。使错误易于排除,因而可使软件开发速度快,质量高。

内聚度

内聚度是指模块内部的联系紧密程度,联系越紧,则内聚度越高,模块独立性越强,系统越易于理解维护。具有良好内聚度的模块应能较好的满足于信息局部化的原则。功能完整单一。同一时候。模块的高内聚必定导致模块的低耦合度。

理想的情况是:一个模块仅仅使用局部数据变量。完毕一个功能。

按由弱到强的顺序。模块的内聚度可分为下面几类:

1. 偶然内聚:块内的各个任务没有什么有意义的联系,仅于偶然位于同块,若非时空限制,不应使用

2. 逻辑内聚:一个模块完毕的任务在逻辑上属于同样或相似的一类(如依据參数不同。模块输出多种结果),但这样的内聚的模块存在一些致命的问题。如修改困难,模块内部修改,须要考虑到其他模块的调用影响;模块内部须要判别调用者,使得模块外部间的联系添加。内部推断陷阱的产生以及装载整块所带来的性能下降等等

3. 时间内聚:是指一个模块中包括的任务须要在同一时间内运行(如初始化,结束等所需的操作)

4. 过程内聚:一个模块内的各个处理元素是相关的。并且必须按固定的次序运行,表现为有次序的流程,面向过程化的思维很多其它的是採用这样的方式进行模块/函数的划分

5. 通信内聚:一个模块中的各处理元素 须要引用共同的数据

6. 顺序内聚:一相模块内各处理元素关系密切,必须按规定的处理次序顺序运行,后运行的语句/段往往依赖先运行的语句/段

7. 功能内聚:模块仅完毕一个单一的功能。且该模块的全部部分是实现这一功能所必须的,没有多余的语句。功能内聚是内聚度最高的一种模块类型,结构紧凑。逻辑清晰。易于理解。便于维护,可靠性强,稳定性高,因功能单一,复用性高。在划分模块的时候,应追求此类型。

耦合度

耦合度是从模块外部考察模块的独立性程度,用来衡量多个模块间的相互联系。普通情况下耦合度应从下面三方面考虑:

耦合内容的数量:模块间发生联系的数据和代码的多少,多则高,少则低;

模块的调用方式:模块间代码数据共享的方式,直接调用。依赖调用,载入调用等

模块间的耦合类型:耦合类型有下面几种方式:

独立耦合,模块间彼此独立,没有直接联系,且属于同个软件系统或隶属同一上层模块

数据耦合,模块间彼此交互数据,接受返回值。传递数据參数,通常应保持模块间的关系为数据耦合

控制耦合。模块间传递的是控制參数而非数据參数,用于控制还有一模块的处理逻辑,这说明还有一模块内部存在多个并列的逻辑路径,通过提高被调用模块的内聚性,能够彻底的去除这样的联系。因为添加了设计理解的复杂度。应避免使用该耦合方式。

公共耦合,又称公共环境耦合或数据区域耦合。若模块间对同一数据区域进行存取操作,则模块间的关系为公共耦合。

内容耦合,一个模块直接訪问还有一模块内部代码或数据,出现内容耦合。

内容耦合严重破坏了模块的独立性和系统结构化,代码互相纠缠,执行错综复杂。应全然不使用内容耦合

系统模块化方法

下面列举常见的大粒度模块划分方法

基于需求功能划分:依据用户需求归类的不同,对模块进行大粒度的划分,如用户管理模块,订单流程模块等

基于系统层次划分:依据模块上下级,同层类别的关系进行模块划分,如展现层,业务层,数据层等

基于专业领域划分:依据解决的问题域的不同。对模块进行划分,如人机交互领域。数据库领域,网络通信领域,数据加解密。图形图像等

时间: 2024-10-02 03:34:12

怎样将系统模块化的相关文章

高可用系统在点评的实践与经验--讲座思考

SDCC 2016架构峰会纪要(三) 关键词:深度.干货.大牛.火爆.一线.图书 题目 主讲人 主讲人个人简介 支付宝红包稳定性实践与思考 王 俊 蚂蚁金服支付清算平台架构师 宅米网技术架构变迁与实践 李智慧 宅米CTO 携程下一代无线App架构设计 陈浩然 携程旅行网无线开发总监 新型架构实践与应用 孙子荀 腾讯手Q公众号后台负责人 从概率和用户感知出发实现高可用架构 史海峰 当当网架构部总监 高可用系统在点评的实践与经验 陈一方 大众点评交易平台技术团队负责人 微服务架构设计与实践 黄 勇

Nucleus PLUS系统架构和组件

(一)组件和软件组件方法学 1,软件组件(Software Component)的定义 从一般意义上来说,组件(Component)是系统中可以明确辨识的组成部分,一个不透明的功能实现体.软件开发中,组件是对数据和方法的简单封装,它具有约定式规范的接口.组件具有面向对象的特征,具有功能独立性.高度的可重用性.与语言和平台无关性等特点.软件组件是软件系统中具有一定意义的.相对独立的构成部分,是一个通过规定的接口提供一组服务代码的执行单元,这个执行单元的特点是高内聚.低偶合.组件的接口和组件的实现相

谈谈我对SOFA模块化的理解

今天我们谈谈SOFA模块化,首先看一段SOFA的介绍: SOFABoot是蚂蚁金服开源的基于Spring Boot的研发框架,它在Spring Boot的基础上,提供了诸如 Readiness Check,类隔离,日志空间隔离等能力.在增强了Spring Boot的同时,SOFABoot提供了让用户可以在Spring Boot中非常方便地使用SOFA中间件的能力. 在接触SOFA的模块化概念之前,我对服务端开发的模块化认知停留在"模块化"这个层面,我通常会按照下图所示的结构组织自己负责

Spring AOP 简单理解

AOP技术即(面向切面编程)技术是在面向对象编程基础上的发展,AOP技术是对所有对象或一类对象编程.核心是在不增加代码的基础上,还增加了新的功能.AOP编程在开发框架本身用的比较多,而实际项目中,用的比较少.它是将分散在各个业务逻辑代码中的相同代码抽取出来形成一个独立的模块. 1.定义AOP术语 (1)切面(aspect):要实现的交叉功能,是系统模块化的一个切面或领域. (2)通知(advice):切面的具体实现,包含五类通知. (3)连接点(jointpoint):应用程序执行过程中插入切面

如何基于Vert.x实现远程调用?

Vert.x的微服务 最近关于微服务的概念到处都在宣传,而Vert.x的verticle本身就是很好的一种服务定义,你可以把verticle看成一个service,也可以把verticle看成一个actor.这样你的视角会切到Actor模型里.本文我们将讨论如何基于Vert.x实现远程调用. 传统Java开发人员受EJB以及Spring的影响比较深,所以对面向接口编程了解的比较多.哪怕跨JVM也可以通过接口来调用对方提供的方法.这是非常友好方便的开发方式,因为框架层面做了服务发现以及服务生命周期

软件工程理论方法与实践第八章读后感

设计是一个建模的活动他在分析模型的基础上完成在实现环境的类建模,状态图建模,协作建模,组件建模,部署建模,持久建模和用户界面原型,实现从需求分析到软件实现之间的跨越.设计活动,系统设计两个主要阶段,详细设计是细化原有的分析对象,确定一些新的对象,对每一个子系统接口和类,进行准确详细的说明.模块性降低复杂性的有效方法是将系统模块化,将一个复杂的大系统分解成若干个相对的较小部分,成为子系统(Subsystem).如果一个子系统依然是复杂的,那么继续分解直到易于开发和管理为止.子系统是一个定义明确的软

Aspect Oriented

AO技术不是为了替代OO技术出现的,它的出现是为了对OO技术进行辅助和增强 1.基本概念 1.1关注点 在AO技术中,软件系统可以由一组关注点来组成,关注点是系统开发过程中所关心的方面,如系统的功能.安全性和性能等等.(可以理解为一系列需求,只不过这些需求由不同的Stakeholder来关注) 1.2横切关注点 虽然在OO技术中我们已经强调了模块化.封装的作用,也已经有了如类.包等模块化机制,但是系统中还是存在的一些关注点(主要来自系统的非功能性需求)典型如:系统的业务逻辑.系统数据持久存储.系

Ceph源码解析:CRUSH算法

1.简介 随着大规模分布式存储系统(PB级的数据和成百上千台存储设备)的出现.这些系统必须平衡的分布数据和负载(提高资源利用率),最大化系统的性能,并要处理系统的扩展和硬件失效.ceph设计了CRUSH(一个可扩展的伪随机数据分布算法),用在分布式对象存储系统上,可以有效映射数据对象到存储设备上(不需要中心设备).因为大型系统的结构式动态变化的,CRUSH能够处理存储设备的添加和移除,并最小化由于存储设备的的添加和移动而导致的数据迁移. 为了保证负载均衡,保证新旧数据混合在一起.但是简单HASH

NIO提升系统性能

前言 在软件系统中,I/O的速度要比内存的速度慢很多,因此I/O经常会称为系统的瓶颈.所有,提高I/O速度,对于提升系统的整体性能有很大的作用. 在java标准的I/O中,是基于流的I/O的实现,即InputStream和OutPutStream,这种基于流的实现以字节为基本单元,很容易实现各种过滤器. NIO和new I/O的简称,在java1.4纳入JDK中,具有以下特征: 1.为所有的原始类型提供(buffer)缓存支持: 2.使用Charset作为字符集编码解码解决方案: 3.增加了通道