聊聊架构-模块化
来源:互联网 发布:丙肝化验单正常数据 编辑:程序博客网 时间:2024/05/22 06:48
转载自并发编程网 – ifeve.com
什么是模块化?
模块化是指解决一个复杂问题时,自上而下逐层把系统划分成若干模块的过程
为什么需要模块化?
模块化的目的是为了降低程序的整体复杂度,使程序设计、调试和维护等简单化。各个模块可独立工作,即便单模块出现故障,也不影响整个系统工作。模块化具有三个特性:相互独立,可替换,通用。比如车载收音机就是模块化设计,收音机和汽车里的其他模块相互独立,收音机坏了不会影响车上的其他功能,具备独立性。因为汽车预留了接口,可以随意的将收音机替换成CD机和DVD机等,具备可替换性。车载收音机从汽车里取出来后,拿到其他车或者其他地方也是可以使用的,具备通用型。
如何实现模块化?
模块化的表现形式可以是多个二方包或者一个Maven工程的子模块。系统中的公共组件可以抽取出来形成一个二方包,提供给更多的系统使用,比如业务系统里的任务框架,数据库锁组件和配置管理等。
如何划分模块?
- 基于水平切分。把一个系统按照业务类型进行水平切分成多个模块,比如权限管理模块,用户管理模块,各种业务模块等。
- 基于垂直切分。把一个系统按照系统层次进行垂直切分成多个模块,如DAO层,SERVICE层,业务逻辑层。
- 基于单一职责。将代码按照职责抽象出来形成一个一个的模块。将系统中同一职责的代码放在一个模块里。比如我们开发的系统要对接多个渠道的数据,每个渠道的对接方式和数据解析方式不一样,为避免不同渠道代码的相互影响,我们把各个渠道的代码放在各自的模块里。
- 基于易变和不易变。将不易变的代码抽象到一个模块里,比如系统的比较通用的功能。将易变的代码放在另外一个或多个模块里,比如业务逻辑。因为易变的代码经常修改,会很不稳定,分开之后易变代码在修改时候,不会将BUG传染给不变的代码。
易变和不易变?
根据代码的易变程度,将不变和变化的功能隔离,可以让代码更加稳定,减少代码的修改量,从而降低维护成本。从几个层面逐渐入手:
- 系统分层:J2EE系统一般都划分成页面展现层,业务逻辑层和持久层。业务逻辑层容易变,而持久层变化小。对外提供服务系统分层是服务层,实现层和持久层,一般也是实现层不稳定需要经常修改,但是修改不会波及到持久层和服务层。将系统分层后,底层要更加稳定,可以新增接口或代码,但是尽量减少修改代码,因为底层一旦出错,影响面会非常广。系统间的分层也同样是需要底层系统更稳定。
- 代码分隔:代码上分为接口,抽象类和实现类。抽象类和接口要做到充分的抽象,从而减少修改。比如接口要符合单一原则,避免接口修改。比如Java的Closeable接口里只有一个close方法,指责非常单一,所以无论未来有什么场景,基本不会修改这个接口。如果你的接口里有很多其他职责的方法,一旦一个方法修改,很多实现类就必须跟着修改。
0 0
- 聊聊架构-模块化
- 聊聊架构
- 基于java聊聊架构
- 聊聊架构(1)
- 聊聊架构(2)
- 聊聊架构(3)
- 聊聊架构(4)
- 聊聊mvp架构
- 《聊聊架构》笔记记录
- 聊聊架构设计
- 聊聊微服务架构
- iOS架构--项目模块化
- 《聊聊架构》第一部分读书笔记
- Android架构设计之模块化
- 【python】flask+blueprints模块化架构
- 聊聊Dubbox(三):架构原理
- 聊聊Dubbox(二):架构原理
- c#仿QQ安全管家模块化架构
- linux 添加用户 将用户加入组
- php面向对象--实现购物车类(session)
- Android listview与adapter用法
- leetcode remove duplicate of sorted list
- three.js 源码注释(七十三)extras/geometries/TextGeometry.js
- 聊聊架构-模块化
- Codeforces Round #286 div.1 D 506D D. Mr. Kitayuta's Colorful Graph【并查集】
- Boa移植过程
- [Leetcode] 35 - Search Insert Position
- php time to systemtime
- dom4j创建xml文件
- 使用android-async-http-master框架异步获取数据
- 简单的iOS引导页
- leetcode MergeTwoSortedList