`
javababy1
  • 浏览: 1240558 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

项目旧代码常见问题

阅读更多
公司一直在强调编程规范,但编程规范只能规避一些程序编写浅层次的问题,至于一些深层次的问题,只能靠人的自觉和开发能力的提升了。
以下都是我以为的在程序设计开发中普遍存在的深层次的问题,这些问题光靠编程规范等文档的指导是无法避免的。

程序中充斥了大量相同或相近的代码。这样做在开发的时候会省时,省力,因为只要copy一下既有代码,就很容易的添加了新的功能项,而且即不用费太多的脑筋,又可以有很多的代码量,用的时间也很短。但是,这样的程序放到维护阶段就可以说是噩梦了,因为同一个功能要修改好几个地方。而且很容易漏改,或者引入新的问题。
我们现在评估工作量是按照代码量,而不是按照代码的质量。如果盲目的看重代码量,就很容易造成COPY/PASTE泛滥的现象。
重构理论强调“事不过三,三必重构”,同样的代码如果出现了三次,那么出现四次,五次的几率就很大了。为了长远的方便,现在多做一些优化整理的工作也是值得的。软件出现bug的概率并不是随着软件规模呈线性增长的,而是呈指数级的增长。如果有2处重复,出错概率是2的话,那么3处重复,概率就为4;4处就为8... 重复次数少的话,出现的错误还可以处于可控范围内,如果重复次数到了一定程度,那么软件即使能维护,其成本也是极其高的。
在出现第二次重复,或者第三次重复的时候进行相应的重构工作是最容易的,而且可以将出错的概率一下从2或4降为1。如果重复次数多了,再重构的话,那所要付出的工作量就不是一般的大了,因为要协调适配各种相近的情况。
编写程序,一开始不要涉及太多的设计模式,要本着简单快速的原则。在发现有重复情况出现,开始重构的时候再引入合适的设计模式。因为设计模式的本质就是将重复或易变的地方提取出来,便于以后的维护,扩展。出现第二次重复的时候,你才能发现这些地方,所以这时才是应用设计模式的最好时机。

IF/ELSE,SWITCH/CASE 泛滥。使用了面向对象的程序语言,编写出来的并不一定就是面向对象的程序。这一点可以从我们程序中的if/else, switch/case 使用的情况看出来。它们使用的越多(因为没有使用多态),那么程序面向对象的特性就越差。经常可以在程序中看到4,5个if/else组合,switch下十多个case的情况,这些开发时的图一时之轻松,都为以后版本的难以维护埋下了伏笔。(维护人员埋怨以前的开发质量差也不是没有道理的)

程序没有分层规划,不管前台,后台,程序按照功能来划分,就是3个层次,数据持久层,数据控制层,业务逻辑层。前台程序还要在最后添加上显示层。前台的代码经常可以看到在界面程序中直接调用前后台交互命令,数据转换,显示处理,一气呵成。后台据说也是业务逻辑和数据持久化都写在一起。
这样的坏处显而易见的,写不了或者不好写测试代码;加大调试难度;bug在整个程序范围内泛滥。
大而化小,分而治之。越大越复杂的东西越不好管理,越小越简单的则相反。软件设计要讲究颗粒度,粒度太大太小都不好,最重要的就是掌握好合适的度。在方便性和数量上取一个合适的平衡。一般来说分3层就很合适了,数据持久层,数据控制层,业务逻辑层,每一层各司其职,每一层的功能实现对其他层都是透明的。
如果采用了分层可以取得以下几点好处:更方便的写出测试代码;调试更方便;BUG禁锢在某一层上,不会向整个系统蔓延;每个界面可以脱离主框架单独运行;可以使用界面纪录工具进行通用功能的自动化系统测试。

类之间的交互,多使用接口,尽量少用继承和具体类。使用接口,进可攻,退可守,完全是随需应变,不会将自身绑定在某种条件下,利于程序的变化,扩展。
分享到:
评论

相关推荐

    tomcat部署项目常见问题

    ### Tomcat部署项目常见问题及ExtJS包说明 #### 一、Tomcat部署项目的注意事项 在使用Tomcat部署项目时,有一些重要的事项需要注意: 1. **确保项目与Tomcat版本兼容**:首先需要确保项目的JDK版本与Tomcat版本相...

    博途项目升级常见问题

    根据描述,这里提到的“STEP7 V14 SP1能否打开STEP7 V14项目”是博途项目升级过程中常见的问题。STEP7是西门子较为早期的自动化软件,而博途(TIA Portal)则是后续的集成自动化软件环境。升级时需要关注的几个核心...

    javaweb项目开发个人常见问题与经验浅谈.docx

    ### JavaWeb项目开发个人常见问题与经验浅谈 #### 一、业务逻辑 在JavaWeb项目的开发过程中,业务逻辑的设计尤为重要。它不仅关系到系统的稳定性,还直接影响用户体验和项目的后期维护成本。 - **对基础资料的...

    maximo 常见问题解决办法

    例如,对于一个同时拥有全新和半旧惠普笔记本电脑的企业,可以通过设置不同的条件代码来区分这些物品的状态,并分别追踪它们的价格变动,从而确保成本计算更加准确。 ##### 1.2 库存分类与优化 在Maximo系统中,...

    常见问题_vivado常见问题_

    2. SDK裸机编程常见问题:SDK(Software Development Kit)是Vivado的一部分,用于编写和调试硬件加速器的软件。裸机编程是指不依赖操作系统直接控制硬件。可能遇到的问题包括启动脚本错误、链接问题、驱动程序兼容...

    项目工具代码

    以下是一些常见的项目工具代码及其相关知识点: 1. 版本控制系统(如Git):Git是一种分布式版本控制系统,用于跟踪对文件和目录的更改。通过Git,开发者可以协同工作,合并代码,回滚到旧版本,创建分支以进行新...

    android 项目源代码

    在Android移动开发领域,源代码是学习和理解...通过深入研究`mytracks`项目源代码,开发者不仅可以掌握Android开发的基础,还能了解到实际项目中遇到的问题及解决方案,这对于提升个人技能和解决实际问题非常有帮助。

    Webmis MVC项目代码快速开发智能生成工具

    【Webmis MVC项目代码快速开发智能生成工具】是一款专为提升Web应用开发效率而设计的工具,它基于MVC(Model-View-Controller)架构,能够帮助开发者自动生成常见的业务逻辑代码、数据访问层代码以及视图层代码,极...

    Java代码审查工具

    2. **PMD**:PMD是一个开源的静态代码分析工具,用于检测Java代码中的常见问题,如未使用的变量、空的catch块、无效的if语句等。开发者可以自定义规则,以适应特定的项目需求。 3. **Checkstyle**:这个工具专注于...

    代码行数统计工具,绿色软件,无需安装

    这种类型的工具在IT行业中扮演着重要的角色,尤其是在软件开发和项目管理中,因为代码行数是衡量软件规模、工作量、复杂度以及开发进度的一种常见指标。 首先,我们要理解“代码行数”(Lines of Code, LOC)的概念...

    源代码对比器

    4. 升级迁移:在项目升级或迁移时,对比器可以用于检查旧代码与新代码的差异,确保迁移的完整性和正确性。 5. 学习借鉴:对比开源项目或其他代码库,可以帮助学习新的编程技巧和最佳实践。 总而言之,源代码对比器...

    项目包 电脑没内存了 找个地方存一下代码

    4. 优化代码存储:为了减少本地存储占用,可以对代码进行合理组织,删除不必要的文件,如旧版本的代码、测试数据或大型日志文件。此外,使用轻量级的IDE(集成开发环境)和设置代码压缩也能节省空间。 5. 使用虚拟...

    ESP8266EX常见问题_ESP8266EX常见问题_

    了解并解决ESP8266EX在使用过程中遇到的常见问题是提升开发效率和项目稳定性的关键。以下是一些关于ESP8266EX常见问题及其解决方案的详细阐述: 1. **连接问题**:ESP8266EX在与Wi-Fi网络连接时可能会遇到问题,如...

    Python-Bowler一个Facebook出品的现代Python项目的安全代码重构

    2. **代码迁移**:当Python语言或第三方库有重大更新时,Bowler可以帮助开发者自动将旧代码迁移到新的API或语法结构,减少手动修改的工作量。 3. **安全性改进**:Bowler能够识别并修复常见的安全漏洞,例如SQL注入...

    易买网代码

    本篇文章将围绕"易买网代码"这一主题,深入解析一个基于MyBatis框架的个人项目——北大青鸟S2易买网项目EasyBuy,旨在探讨其核心功能实现,包括密码修改和收藏栏功能,并为读者提供学习参考。 首先,MyBatis作为...

    休整垃圾代码的成果

    8. `CimPickTool.dsp`:这是一个旧版本的Visual Studio项目文件,用于存储项目的构建设置和配置信息。 综合这些信息,我们可以推断`CimPickTool`是一个C++项目,可能是一个工具或者库,主要功能可能集中在`...

    Xcode 10升级导致项目报错的常见问题解决

    Xcode 10升级导致项目报错的常见问题解决 本文主要介绍了Xcode 10升级导致项目报错的常见问题,并提供了详细的解决方法。文章中通过实践示例代码,详细介绍了各种报错问题的解决方案,对读者的学习或者工作具有一定...

    代码高亮显示javascript插件

    本文将深入探讨这一主题,详细介绍JavaScript代码高亮插件的工作原理、常见功能以及CodeMirror-2.22这个特定版本。 一、代码高亮显示原理 代码高亮的基本原理是通过识别代码中的关键字、变量、字符串、注释等元素...

    C#代码生成器源代码

    Jone.Net代码生成器由程序员Luomingui开发并维护,他在CSDN博客上分享了这个项目的全部源代码。 在C#编程中,三层架构是一种常见的设计模式,它将应用程序分为三个主要部分:表示层(UI)、业务逻辑层(BLL)和数据...

    原创俄罗斯方块代码(VC6.0)(基于MFC)

    尽管代码可能不够成熟和完善,但其包含了初学者在开发过程中的常见问题,如代码组织、错误处理等,对于初学者来说是很好的学习资源。特别是自绘按钮的实现,展示了如何利用GDI进行图形绘制,对于想要深入理解Windows...

Global site tag (gtag.js) - Google Analytics