Snandy
Stop, thinking is the essence of progress.
软件的模块化开发
什么是模块化
模块化这个词最早出现在研究工程设计中的《Design Rules》,这本探路性质的书中。其后模块化原则还只是作为计算机科学的理论,尚不是工程实践。此时硬件的模块化一直是工程技术的基石之一。如标准螺纹、汽车组件、计算机硬件组件等。
软件模块化的原则也是随着软件的复杂性诞生的。从开始的机器码、子程序划分、库、框架、再到分布在成千上万公里的互联网上主机上的程序库。模块化是解决软件复杂性的重要方法之一。
模块化以分治法为依据,但是否意味着我们把软件无限制的细分下去。事实上当分割过细,模块总数增多,每个模块的成本确实减少了,但模块接口所需代价随之增加。要确保模块的合理分割则须了解信息隐藏,内聚度及耦合度。
模块化的意义
一句话:解决软件的复杂性问题,或说降低软件的复杂性。不至于随着变大而不可控而失败,使其可控,可维护,可扩展。
从这个意义上说:要编写复杂软件又不至于失败的唯一方法就是用定义良好的接口把若干简单模块组合起来。如此,多数问题只会出现在局部,那么就有希望对局部进行改造、优化甚至替换,而不至于牵动全局。
更术语一些的定义:模块化是一个软件系统的属性,这个系统被分解为一组高内聚、低耦合的模块。这些模块拼凑下就能组合出各种功能的软件,而拼凑是灵活的,自由的。经验丰富的工程师负责模块接口的定义,经验较少的则负责实现模块的开发。
什么是模块
上面提到,模块化是以分治法为依据。简单说就是把软件整体划分,划分后的块组成了软件。这些块都相对独立,之间用接口(协议)通信,每个块完成一个功能,多个块组合可以完成一系列功能。
以上可以看出划分后的模块应该具有清晰的,有文档描述的边界(接口/协议)。不同的语言对于模块的实现不同。比如SmallTalk,没有模块的概念,所以类就成了划分的唯一物理单元。Java有包的概念,也有类的概念。因此单独的类可以用来划分模块,包也可以用来划分。JavaScript是基于对象的语言,它创建对象无需先声明一个类,因此对象是天然用来划分模块的。
无论那种语言,封装是写模块的首要特质。即模块不会暴露自身的实现细节,不会调用其它模块的实现码,不会共享全局变量。一切只靠接口通信。模块化和封装是密不可分的。
模块的大小
模块分的越多,每一块就越小,接口的定义就越重要。全局复杂度和受bug影响的程度也会相应降低。软件应设计成由层次分明的嵌套模块组成,而且每层的模块粒度应该降至最低。Hatton绘制了一张缺陷密度和模块大小的关系图,发现曲线呈U型,凹面朝上。
可以看到,模块过大或过小都会滋生更多的bug。Hatton的经验表明,200~400行之间的逻辑行的代码是最佳的。
紧凑的模块
紧凑型是一个设计是否能装入人脑的的设计。紧凑的设计让人乐于使用,不会在你的想法与实际工作之间格格不入。紧凑不等同于“薄弱”,也不等同于“容易学习”。对于某些紧凑学习而言,在掌握其精妙的内在概念模型之前,要理解它是非常困难的。比如 Lisp 语言的设计就是紧凑的,又如 jQuery 库的设计也是非常紧凑的。
正交的模块
正交性是有助于使复杂设计也能紧凑的最重要特性之一。在纯正交设计的软件中,任何操作均无 副作用。每一个动作(方法调用)只做一件事,不会影响其它。
Douglas McIlroy 的“只做好一件事”的忠告是针对简单性的建议,但其实也暗含了对正交性的强调。
相关推荐
基于java的架构模式,可以说是一个框架;spring+mybatis+maven的 使用maven项目模块化,统一管理各个模块的开发,开发中各个模块和独立开发,是一个很好的开发框架。决定很值。
内容为J2EE应用开发详解中的源代码 第1章 Java Web应用开发简介 1 1.1 Java EE应用概述 1 1.2 Java EE概念 1 1.2.1 Java EE多层模型 1 1.2.2 Java EE体系结构 2 1.3 Java EE的核心API与组件 4 1.4 Web服务器和应用...
首先对J2EE架构的管理系统作了简要介绍;然后讨论了在面向对象软件开发过程中设计模式起到的重要...这个框架将企业信息管理系统模块化,能够实现业务服务的自动化处理功能,从而建立一个能够快速响应的企业信息管理系统。
是一款面向中小企业的供销链管理系统,基于J2EE快速开发平台Jeecg-Boot开发,采用前后端分离架构:SpringBoot2.x,Ant Design&Vue,Mybatis-plus,Shiro,JWT。项目基于十多年的中小企业管理经验,由ERP领域的资深...
基于J2EE技术的办公自动化系统研究.pdf 基于J2EE的二手图书商务网站的开发.pdf 基于J2EE的电子商务系统开发框架.pdf 基于J2EE的电子商务网站开发研究.pdf 基于J2EE轻量级框架的应用开发.pdf 基于J2EE轻量级框架的...
第1章 J2EE概论...... 1 1.1 简单双层架构到复杂多层架构..... 1 1.1.1 双层(C/S)软件架构设计..... 1 1.1.2 传统三层软件设计架构..... 2 1.1.3 n层软件架构及Web软件架构..... 3 1.2 J2EE简介..... 4 1.2.1 什么...
1、模块化的定义与原理; 2、模块化的作用; 3、模块化的优点; 4、flex与模块通信,直接调用模块(module)方法及示例代码; 5、flex基本控件用法及示例代码; 6、委托、上传文件、操作Word和Excel等等
本系统以减轻教师工作负担、提高工作效率、防止试题泄露、优化考试流程为目的,采用J2EE平台三层架构开发模式,采用一种新的工作流模型设计并实现在线考试系统功能,开发出具有跨平台、功能完善、安全稳定的网上在线...
持久化模式 · 并发性模式 · 企业消息通信模式 · 反模式,或者本身已经变成为模式的错误 在本书中提出的许多模式关注于可扩展性、可伸缩性、灵活性和性能——任何J2EE开发人员的主要关心点。...
struts框架具有组件的模块化,灵活性和重用性的优点,同时简化了基于MVC的web应用程序的开发。 优点: Struts跟Tomcat、Turbine等诸多Apache项目一样,是开源软件,这是它的一大优点。使开发者能更深入的了解其内部...
工作流程管理:完全实现模块化,无侵入。 流程管理:动态给发布流程分配角色,无需手动写死,灵活可变 模块列表:新建、编辑、发布流程,前端实现完全可配置化建立流程图 请假流程:提供一个请假示例,让您很快熟悉...
6.3.1 服务文件的分模块化... 82 6.3.2 本地服务加载器... 85 6.4 Remoting Session实现... 87 6.4.1 实现思路... 88 6.4.2 Session Id的生成... 88 6.4.3 用户信息的保存... 93 6.4.4 维护管理Session. 95 6.4.5 ...
通过使用SSM或SSH框架,可以实现代码的模块化和解耦,提高开发效率和代码质量。MySQL数据库作为数据存储,可以提供稳定的数据存储和快速的数据查询。而JSP作为页面开发技术,可以方便地生成动态的网页内容。 在项目...
而政府信息化的建设同样带来了新的问题,即政府大量电子信息文件的管理,因此,亟需开发一种满足当前政府档案信息化管理需求的系统,来解决政府信息化过程中所面临的问题。 本文主要根据XX局档案管理的具体情况,...
支持项目创建、组织、构建自动化以及依赖管理,确保不同模块和组件之间的协调一致。 编译与构建: 包括编译器、构建工具(如Make、Gradle、Maven)等,用于将源代码转换为可执行文件或库,并进行资源打包、优化...
提供整套公共微服务服务模块:集中权限管理(单点登录)、内容管理、支付中心、用户管理(支持第三方登录)、微信平台、存储系统、配置中心、日志分析、任务和通知等,支持服务治理、监控和追踪,努力为中小型企业...
**项目功能介绍:** 本微信小程序是基于SSM(Spring、SpringMVC、MyBatis)平台开发的J2ee高校毕业生就业信息系统。...本系统采用模块化设计,易于二次开发定制,可根据高校实际需求扩展更多功能。
本文设计了一种基于WEB的网络办公自动化系统,系统建立在Browser Server Database三层构架之上,采用最先进的、主流的、跨平台的Java技术开发,模块化设计,实现了流程自定义,部门功能...
此外,还要考虑开发人员的水平,学习了两年的jsp开发,对于这个系统的编写,我想完整的之需要两个月就可以写出程序,再花上几天的调试,计划两个月左右就可以完成投入使用了。 我们掌握了数据库及其应用技术、...
实现Web界面动态生成与流转、处理逻辑的模块化开发和打包部署; 2. 使J2EE Web应用开发人员能够像开发桌面应用用户界面一样,直接在java代码中响应界面组件交互事件并刷新界面组件内容; 3. Web组件的作用域...