Snandy
Stop, thinking is the essence of progress.
软件的模块化开发
什么是模块化
模块化这个词最早出现在研究工程设计中的《Design Rules》,这本探路性质的书中。其后模块化原则还只是作为计算机科学的理论,尚不是工程实践。此时硬件的模块化一直是工程技术的基石之一。如标准螺纹、汽车组件、计算机硬件组件等。
软件模块化的原则也是随着软件的复杂性诞生的。从开始的机器码、子程序划分、库、框架、再到分布在成千上万公里的互联网上主机上的程序库。模块化是解决软件复杂性的重要方法之一。
模块化以分治法为依据,但是否意味着我们把软件无限制的细分下去。事实上当分割过细,模块总数增多,每个模块的成本确实减少了,但模块接口所需代价随之增加。要确保模块的合理分割则须了解信息隐藏,内聚度及耦合度。
模块化的意义
一句话:解决软件的复杂性问题,或说降低软件的复杂性。不至于随着变大而不可控而失败,使其可控,可维护,可扩展。
从这个意义上说:要编写复杂软件又不至于失败的唯一方法就是用定义良好的接口把若干简单模块组合起来。如此,多数问题只会出现在局部,那么就有希望对局部进行改造、优化甚至替换,而不至于牵动全局。
更术语一些的定义:模块化是一个软件系统的属性,这个系统被分解为一组高内聚、低耦合的模块。这些模块拼凑下就能组合出各种功能的软件,而拼凑是灵活的,自由的。经验丰富的工程师负责模块接口的定义,经验较少的则负责实现模块的开发。
什么是模块
上面提到,模块化是以分治法为依据。简单说就是把软件整体划分,划分后的块组成了软件。这些块都相对独立,之间用接口(协议)通信,每个块完成一个功能,多个块组合可以完成一系列功能。
以上可以看出划分后的模块应该具有清晰的,有文档描述的边界(接口/协议)。不同的语言对于模块的实现不同。比如SmallTalk,没有模块的概念,所以类就成了划分的唯一物理单元。Java有包的概念,也有类的概念。因此单独的类可以用来划分模块,包也可以用来划分。JavaScript是基于对象的语言,它创建对象无需先声明一个类,因此对象是天然用来划分模块的。
无论那种语言,封装是写模块的首要特质。即模块不会暴露自身的实现细节,不会调用其它模块的实现码,不会共享全局变量。一切只靠接口通信。模块化和封装是密不可分的。
模块的大小
模块分的越多,每一块就越小,接口的定义就越重要。全局复杂度和受bug影响的程度也会相应降低。软件应设计成由层次分明的嵌套模块组成,而且每层的模块粒度应该降至最低。Hatton绘制了一张缺陷密度和模块大小的关系图,发现曲线呈U型,凹面朝上。
可以看到,模块过大或过小都会滋生更多的bug。Hatton的经验表明,200~400行之间的逻辑行的代码是最佳的。
紧凑的模块
紧凑型是一个设计是否能装入人脑的的设计。紧凑的设计让人乐于使用,不会在你的想法与实际工作之间格格不入。紧凑不等同于“薄弱”,也不等同于“容易学习”。对于某些紧凑学习而言,在掌握其精妙的内在概念模型之前,要理解它是非常困难的。比如 Lisp 语言的设计就是紧凑的,又如 jQuery 库的设计也是非常紧凑的。
正交的模块
正交性是有助于使复杂设计也能紧凑的最重要特性之一。在纯正交设计的软件中,任何操作均无 副作用。每一个动作(方法调用)只做一件事,不会影响其它。
Douglas McIlroy 的“只做好一件事”的忠告是针对简单性的建议,但其实也暗含了对正交性的强调。
相关推荐
J2EE项目模块化开发是一种高效且可维护的软件开发方法,它将大型应用程序分解成多个独立的模块,每个模块负责特定的功能。这种方式使得开发团队能够并行开发,提高开发效率,同时也便于代码的重用和后期维护。在这个...
Spring还包含了丰富的模块,如Spring MVC(用于Web开发)、Spring JDBC和MyBatis支持(数据访问)、Spring Security(安全控制)等。Spring的IoC容器管理着应用的生命周期,使得开发者可以专注于业务逻辑,而不是...
J2EE企业级开发考试大纲详细涵盖了J2EE开发中的关键技术和知识点,旨在测试学生对这一领域的理解和应用能力。以下是大纲中涉及的主要内容: 1. **Struts框架技术**:Struts是Java Web开发中常用的MVC框架。考生需要...
J2EE平台的核心特性包括模块化、可移植性、安全性和性能优化。它提供了多种服务,如Web容器、EJB(Enterprise JavaBeans)容器、JMS(Java Message Service)、JTA(Java Transaction API)等,使得开发者能够轻松地...
在Eclipse环境中,同时开发J2EE模块和Flex客户端模块是一项常见的任务,特别是在构建富互联网应用程序(Rich Internet Applications, RIA)时。这样的组合允许后端服务器处理业务逻辑和数据管理,而前端Flex客户端则...
在J2EE模块2中,考生需要理解Servlet生命周期、初始化参数以及如何使用Servlet进行请求响应处理。 - **JSP(JavaServer Pages)**:JSP是一种视图技术,允许开发人员在HTML页面中嵌入Java代码,实现动态网页。JSP与...
这种设计模式有助于模块化开发,使得系统易于维护和扩展。 #### 3. 技术组件 J2EE定义了一系列关键的技术组件,如Servlets、JavaServer Pages (JSP)、Enterprise JavaBeans (EJB)、Java Messaging Service (JMS)、...
J2EE平台的核心理念是利用组件化开发,提高代码重用性,降低系统维护成本,增强可扩展性和可移植性。 **二、J2EE的优势** 1. **多层架构**:J2EE支持四层架构(客户端、Web层、业务逻辑层、数据访问层),使得系统...
Java EE 平台通过将业务逻辑与表示层和数据访问层分离,实现了模块化和解耦,从而简化了大型系统的开发和维护。 UML,则是一种标准化的可视化建模语言,用于软件工程中的系统分析和设计。UML 包括各种图表,如用例...
- **易于维护**:模块化的设计使得系统更新和维护变得更加简单,降低了长期运营的成本。 - **构建统一的业务平台**:CHARISMA 平台能够整合企业内的各种业务流程,形成一个集中的业务处理中心,提升整体运营效率。 ...
**J2EE项目开发模板详解** 在IT领域,J2EE(Java 2 Platform, Enterprise Edition)是一个由Oracle公司维护的、用于构建企业级分布式应用的开放标准平台。J2EE项目开发模板则是开发者在创建大型、复杂的企业系统时...
- **多层架构**:典型的J2EE应用采用多层架构,如客户端、Web层、业务逻辑层和数据访问层,这有助于职责分离和模块化开发。 - **组件化**:通过使用预定义的组件,如EJB和Servlet,开发人员可以快速构建应用程序,...
系统设计阶段,开发者需要考虑模块化设计,以便于代码的复用和维护。此外,还要考虑系统的扩展性,以便未来添加新的功能。在这一阶段,可能会涉及数据库设计、服务接口定义、UI框架选择等。 编码实现阶段,开发者会...
2. **系统设计**:基于J2EE架构,如何设计模块化的系统结构,确保扩展性和可维护性。 3. **开发流程与协作**:团队开发中的版本控制、代码审查、单元测试等最佳实践,以及如何有效协作。 4. **问题解决**:在项目...
《J2EE OA项目开发日记》是一篇详细记录了在J2EE环境下开发办公自动化(OA)项目过程的文档。这个项目涵盖了多个关键的技术点,包括构建序列发生器、Java项目的构建规范、EJB在JBoss中的部署、MVC模型结构的理解以及...
J2EE的核心概念主要围绕服务器端的技术,它提供了多种服务、API和模块化结构,以支持多层架构中的应用开发。这些包括但不限于: 1. **Servlets**:Servlet是J2EE中处理HTTP请求的Java类,它是动态Web应用的基础。...
本文将详细解析如何将这三个组件整合在一起,以开发一个J2EE模块,并通过实际案例来阐述这一过程。 首先,BlazeDS是Adobe公司提供的一款开源服务器端技术,它允许在Flex客户端和Java服务器之间进行实时双向通信。...
这些API和服务允许开发者以模块化的方式处理复杂的业务逻辑,从而实现高可扩展性和可维护性。 在本项目中,数据库的设计是关键的一环。J2EE应用通常需要与数据库进行交互来存储和检索数据,这涉及到SQL(Structured...
结合这两个概念,J2EE OA项目是利用J2EE技术进行的办公自动化系统的开发。 在J2EE OA项目开发过程中,开发者通常会经历需求分析、系统设计、编码实现、测试优化以及部署上线等多个阶段。首先,需求分析是了解用户...