2. 复用性
(上接)在软件开发过程中,其实很多要实现的功能都具有相同或者相似性。当你开发完一段代码后,你发现这段代码可以用到另一个程序中,这时复用就出现了。最简单的复用就是代码拷贝,将一段代码拷贝到另一个地方使用。代码拷贝应当是最低级别的复用,因为它可维护性差,当这段代码因为某种原因需要修改时,这种修改就变成了可怕的梦魇。将同样的代码在几十甚至上百处进行同样的修改。这样的修改也许我们大多数都遇到过,很烦,很累,也很讨厌,有人形容为“代码搬运”。如果写一个通用函数或者通用类让所有地方调用,问题就可以得到解决。这就是我们要考虑的代码复用性。
如果你在编写代码的时候考虑一下,这段代码是否可以被其它地方使用,或者考虑一下这个要编写的功能在其它地方是否编写过,随时有复用的意识,我们的编码水平就开始在提高了。在编写代码时,为了这段代码在其它地方使用,你可能就要想法编写得更加通用。在编写另一段代码时,突然发现某个功能已经在某段代码中实现过了,那么你可能就要考虑重构那段已经实现的代码,将通用的部分从那段代码中解藕出来(这就是前面提到的解藕的原因之一)。
比如,我在开发过程中发现了很多可以通用的功能,都把它们提出了写成了公用行数放到工具类或者写成公用类中,如获取当前期间、获取本位币、BigDecimal的四则运算、当前汇率的计算等。我要特别提到的是我开发条件查询的过程。
起初,我编写了一段某个报表的条件查询代码。很快,我发现这段代码可以在很多地方复用,因为几乎所有报表都需要条件查询。但是,编写一个通用的条件查询代码其实不太容易,因为不同的报表有不同的字段、不同的条件查询项以及不同的条件逻辑。还是像前面提到的分析方式,先总结出所有需求的共同点、不同点、扩展点,共同点保留,不同点提取出来做成扩展点,预见可能有那些扩展功能都罗列出来,最后重构了这段代码。现在,不管是什么报表,有什么字段或条件查询项,只要在条件查询页面添加了控件,并将控件的名称注册到我的条件查询类中,几乎不编写java代码就可以实现条件查询了(一些特殊判断逻辑的条件需要编写代码)。如果要增加新的条件查询项,只需要在条件查询页面中增加这个控件并且注册这个控件名,新增条件就完成了。
<plugin desp="查询" onEvent="filter" type="..plugin.CommonDynamicGridPlugin" attr="grid:grid;hasPage:true">
...
<plugin type="..plugin.CommonFilterPlugin">
<value name="join">and</value>
<value name="include">
AP_APVoucher.cVouTypeGUID;AP_APVoucher.cCurGUID;AP_APVoucher.cSupGUID;AP_APVoucher.cVouCodeLower;AP_APVoucher.cVouCodeUpper;AP_APVoucher.dVouDateLower;AP_APVoucher.dVouDateUpper;AP_APVoucher.iRedFlag;AP_APVoucher.iAuditStatus;iCheckStatus;GLVoucher;AP_APVoucher.iPayableAMT_FLower;AP_APVoucher.iPayableAMT_FUpper;AP_APVoucher.iPayableAMTLower;AP_APVoucher.iPayableAMTUpper
</value>
<value name="AP_APVoucher.cFlag">AP</value>
<plugin desp="生成“是否核销”过滤信息的plugin" type="..CheckStatusFilterPlugin"></plugin>
<plugin desp="生成“是否制证”过滤信息的plugin" type="..GLVoucherFilterPlugin"></plugin>
</plugin>
</plugin>
举这个例子我是想说明一个复用的过程。通常,一个复用的过程总是从具体到抽象的重构过程:起初都是一些具体的应用,然后从它们中间发现了共同的地方,进行抽象和提取,最后进行代码重构形成通用的东西。也许在你开发完成通用的代码之后,又发现了更加广阔的应用,又继续重构,不断升级。代码重构是需要一些功底的,需要理论进行支持,诸如设计模式等等。但在这里我强调的是意识,代码编写时的一种复用意识。有了这种意识,我们的代码才逐渐开始精妙起来。
分享到:
相关推荐
软件开发文档是软件开发过程中的核心组成部分,它们不仅记录了软件开发的各个阶段,还确保了团队间的沟通清晰,降低了项目风险。以下是关于软件开发文档的详细解释: 首先,软件开发设计文档包括以下几类: 1. ...
软件开发详细设计文档模板 软件开发详细设计文档模板是软件开发过程中的一份重要文档,是软件开发的关键文档之一。该文档的主要目的是对软件系统的详细设计进行描述和说明,以便于开发团队和项目相关人员对软件系统...
在IT行业中,软件开发合同是保障双方权益的重要法律文件,尤其在项目合作初期,它能够明确开发者和委托方之间的责任、权利以及预期成果。以下是基于标题和描述中的知识点的详细说明: 1. **合同的基本构成**:一份...
4. **软件开发生命周期中的文档使用**: - 在项目启动阶段,需求文档帮助确定项目目标,为后续工作提供方向。 - 设计阶段,设计文档为开发人员提供实现蓝图,确保开发按预期进行。 - 开发阶段,开发文档指导编码...
### 软件开发管理规范知识点详解 #### 一、总则 - **目的与适用范围**:旨在规范公司的软件研发及其外包管理活动,适用于公司总部的软件开发管理,分公司可参照执行。 - **开发类型界定**:明确了新系统开发与现有...
软件开发管理制度,软件开发管理制度软件开发管理制度软件开发管理制度
软件开发项目投标书的技术部分知识点 软件开发项目投标书是软件开发项目的核心文件之一,它详细描述了项目的技术要求、设计原则、系统建设目标、项目施工计划、质量控制措施等方面的内容。下面是软件开发项目投标书...
在“ARM嵌入式系统软件开发实例”这个主题中,我们将深入探讨ARM架构下的嵌入式系统软件开发过程。ARM(Advanced RISC Machines)处理器因其高效能和低功耗特性,广泛应用于各种嵌入式设备,如智能手机、物联网设备...
本书《敏捷软件开发.pdf》由软件开发领域的大师级人物Robert C. Martin所著,他是敏捷开发的创始者之一,同时也是著名的软件工程专家。书中系统地阐述了敏捷开发过程中的核心理念、方法论、设计模式以及在实际软件...
《Head First软件开发(中文版)》内容包括:伟大的软件开发:让客户满意、收集需求:知道客户需要什么、项目规划:为成功而筹划、使用情节和任务:开始你实际的工作、足够好的设计:以良好的设计完成工作、构建你的...
读者可以从中学习到Martin的实用技术和流程,理解如何应用敏捷开发解决复杂问题,以及如何在实际开发中使用设计模式和极限编程来提升软件的质量和开发效率。 综上所述,敏捷软件开发作为一种以快速响应变化、持续...
1. 软件架构:采用 B/S 模式的基于网络的 Web 应用程序架构,服务器采用稳定、高效的 LINUX 操作系统作为平台,使用 mysql 作为后台数据库,使用 JAVA 语言描述网站业务逻辑,辅以 JSP 语言进行页面展示。...
软件开发详细设计说明书(示例)1、上传 用户通过关联系统将图片、电子保单、电子文档等上传至影像进行永久保留。 2、下载 用户通过IE浏览器调阅、Applet调阅、出单系统调阅等方式获取并查看保存在影像系统中的图片...
包含所有软件开发的文档模板,具体如下: 测试用例编写规范.doc 概要设计说明书编写规范.doc 计算机源代码编写规范.doc 开发大纲.doc 配置管理规范.doc 配置管理计划编写规范.doc 软件测试计划...
数据字典是软件开发中的关键文档,它提供了关于系统中使用的数据元素的详细描述。这份Excel文件可能包含了数据项、数据流、数据存储、数据结构和数据处理的定义。数据字典用于澄清数据的意义,帮助开发者明确数据的...
《软件开发项目需求分析文档模板》是一份详细指导软件开发项目的文档,旨在为项目团队提供清晰的指导,确保产品能够满足客户的需求。这份文档通常包括以下几个核心部分: 1. **引言**: - **编写目的**:明确文档...
它为软件开发者提供了一个可以深入学习和实践的平台,使得中国的软件开发团队能够解决长期以来困扰他们的一系列问题,例如进度的准确估算、功能的及时完成、团队人员的稳定以及进度计划的有效控制等。这本由斯蒂夫·...
软件开发阶段及软件进度表模板,用于项目管理,项目控制