程序框架的作用

一年之前的那段时间,我一直在维护一个断断续续持续了近5年的项目的程序,直观的印象的惨不忍睹,从未读过如此糟糕的代码。没有任何的设计,完全是想到哪里写到哪里。代码中细节非常多,最明显的是有大量的临时使用的中间变量,从不自己定义对象,需要数据结构的时候,就随便的定义一个list或者一个map凑合着使用。而且从来不用泛型,对于IDE工具的警告置之不理。大段大段重复的代码,从来不提取方法,需要相似的功能就直接把代码段复制过去,然后修改几个变量。从来不使用foreach循环,偏爱while+迭代器。大多数的类都超过3000行,大多数的方法都在150行上下。而且还没有任何的文档,或者DOC注释。程序中虽然有一些注释,但是基本上如同梦中呓语,不知所云。还有大段大段注释掉的代码,总之可读性极差。

这个项目还有一个显著的特点,就是在竭尽全力的使代码行数增多,而且尽可能的写的晦涩,使用大量的错别字来误导你,让你不读它200行的逻辑就不明白它的意思。临时变量不但多而且名称还特别怪,都是一些符号,既不是汉语拼音也不是英文,大小写还很随意,想大写就大写,想小写就小写,完全没有规律,就像被混淆过的。最为过分的是,居然还有大段大段完全无用的代码,这些代码的执行对于方法的结果完全没有影响,删除之后程序完全正常。WTF?

这个项目还有一个有趣的地方,就是似乎完全不知道java的命名约定,类名和接口名称想大写就大写,想小写就小写,既不用骆驼命名法,也不用下划线。错别字奇多,使用英文单词,要不少几个字母,要么多几个字母,总之就是故意恶心你。完全不知道java是有对象的,特别喜欢在方法里罗列一堆一堆的String或者Strhig数组。特别喜欢用sb(StringBuilder)的append来自己拼接JSON字符串,想怎么拼就怎么拼,明明就是一个字符串,还是要拆成好几个append拼接。有的时候这个拼接的过程跨越上百行代码。特别喜欢拼sql玩,而且分的很开,之间毫无关系,先拼几个条件,然后干点别的事情,在忽然拼一个表名,再拼几个条件,过程拉的很开很大气,总之凡是拼接的至少都要跨越几百行。

其实我觉得在这个代码基础上做任何的修补工作都是无济于事的。就如同让鲁迅来修改小学生的作文,让王羲之来修改毛新宇的书法,让食神把一泡狗屎做成美味一样。最好的做法其实就是重做吧。注意是重做不是重构。重构也是要有基础的,不是什么样的代码都能够重构的出来,至少要基本正确才行。

这个项目让我更加的明白了框架的作用,我一直在思考,如果这个项目使用了Sping会怎么样?因为Spring里面有很好的JDBC封装,很好的MVC封装,大概不会让程序变成现在这个样子吧。框架可以限制水平差的程序员的破坏性。我觉得我的老板并没有认识到这个问题。因为他水平太高了,他总觉得我们的这个项目的功能是十分简单的。而且他十分的重视数据模型的设计,认为数据模型才是系统的核心。他这个理解其实不能说是错的。但是在我看来,一个项目,他的方方面面其实都是非常重要的,而且最需要关心的其实就是代码的质量。你数据模型设计的再好,没有好的应用,也无法体现出来。应用层其实才是系统最具有价值的地方。因为数据其实仅仅是原材料,再好的数据没有应用的支持,也无法发挥其作用的。

不重视代码质量其实是很多软件公司的通病。大家都喜欢与天花乱坠的设计,以及花里胡哨的功能,却从来不关心实现是怎么做的。也从来不认为实现也是一个极具技术含量的工作。这种错误的认识毁灭了无数花哨的设计,终结了无数的公司以及创业的梦想。而其实成功总是从脚踏实地中得来的,必须要关注每一个细节。

时间: 2024-09-30 11:05:15

程序框架的作用的相关文章

软件体系结构---安卓系统架构之应用程序框架层分析---1

本博客只介绍安卓系统架构中的应用程序框架层 什么是应用程序框架? 应用程序框架可以说是一个应用程序的核心,是所有参与开发的程序员共同使用和遵守的约定,大家在其约定上进行必要的扩展,但程序始终保持主体结构的一致性.其作用是让程序保持清晰和一目了然,在满足不同需求的同时又不互相影响. 而对于安卓来说:Android系统提供给应用开发者的本身就是一个框架,所有的应用开发都必须遵守这个框架的原则.我们在开发应用时就是在这个框架上进行扩展.在这个框架中我们可以完全访问核心应用程序所使用的API框架,即我们

应用程序框架实战十三:DDD分层架构之我见(转)

前面介绍了应用程序框架的一个重要组成部分——公共操作类,并提供了一个数据类型转换公共操作类作为示例进行演示.下面准备介绍应用程序框架的另一个重要组成部分,即体系架构支持.你不一定要使用DDD这样的架构,使用单层架构和普通三层架构一样可以,不过你如果希望获得更进一步的复用性和封装度,使用更加面向对象的技术是必经之程. 我在2010年以前还在使用古老的ASP.NET WebForm和原始的Ado.Net.之前我有个观念:.NET技术发展太快,跟着微软屁股后面跑太累,所以只使用它一些原始的东西,自己封

微信小程序开发—小程序框架详解(一)

下面以开发者工具自动生成的程序框架为例,对小程序的框架进行介绍. 选择一个空的项目目录创建一个小程序项目,如下图: 创建完成后我们看到如下目录结构: 目录结构 小程序包含一个描述整体程序的 app 和多个描述各自页面的 page. 一个小程序主体部分由三个文件组成,必须放在项目的根目录,如下: 文件 必须 作用 app.js 是 小程序逻辑 app.json 是 小程序公共设置 app.wxss 否 小程序公共样式表 pages目录下为小程序页面,每个页面须建立独立的文件夹,例如上面生成的小程序

应用程序框架实战三十五:服务概述

上一篇介绍了我对几种实体的认识,本篇将介绍几种服务的用法. 预告一下本系列后续计划,本篇之后,准备进入实战演练阶段,先介绍如何快速解决CRUD操作,从如何使用PD数据建模到使用CodeSmith生成代码,先带你感受一下,再回过来介绍框架内部元素,以免你在阅读时昏昏欲睡. 应用服务介绍 对于一个新的设计元素,可以先假定不需要它,等到确实认识到它的作用再引入.那么,应用服务为我们带来了哪些好处呢? 应用服务帮助简化表现层操作 以MVC为例,如果没有应用服务,那么控制器将直接调用仓储,设置查询条件,转

应用程序框架实战十九:工作单元层超类型

上一篇介绍了DDD聚合以及与并发相关的各种锁机制,本文将介绍另一个核心元素——工作单元,它是实现仓储的基础. 什么是工作单元 维护受业务事务影响的对象列表,并协调变化的写入和并发问题的解决. 这是<企业应用架构模式>中给出的定义,不过看上去有点抽象.它大概的意思是说,对多个操作进行打包,记录对象上的所有变化,并在最后提交时一次性将所有变化通过系统事务写入数据库. 当然,工作单元不一定是针对数据库的,不过大部分程序员还是工作在关系数据库中,所以我默认你也在使用关系数据库,由此产生的不准确性你就不

应用程序框架实战三十六:CRUD实战演练介绍

从本篇开始,本系列将进入实战演练阶段. 前面主要介绍了一些应用程序框架的概念和基类,本来想把所有概念介绍完,再把框架内部实现都讲完了,再进入实战,这样可以让初学者基础牢靠.不过我的精力很有限,文章进度越来越慢,所以准备切换一下介绍顺序,把实战演练提前,以方便你阅读代码. 实战演练介绍 本系列实战演练共分两个部分. 实战演练第一部分介绍如何快速解决CRUD机械操作,这一部分我将手把手带领各位同学从搭建VS环境开始,创建程序集及各程序集间的依赖关系,以及引入依赖的外部DLL,并手工完成代码示例中Ap

应用程序框架实战十二:公共操作类开发技巧(初学者必读)

本文专门为初学者而写,因为很多初学者可能还不了解公共操作类的作用和封装技巧,大部分有经验的程序员都会把自己所碰到的技术问题整理封装成类,这就是公共操作类.公共操作类往往具有一些通用性,也可能专门解决某些棘手问题.公共操作类是应用程序框架的核心,主要目标是解决大部分技术问题.我将在本文介绍封装公共操作类的要点,供初学者参考. 开发公共操作类的原因 很多初学者会奇怪,.Net Framework提供的API相当易用,为何还要多此一举,进行一层封装呢.下面列举封装公共操作类的一些动机. .Net Fr

应用程序框架实战十八:DDD分层架构之聚合

前面已经介绍了DDD分层架构的实体和值对象,本文将介绍聚合以及与其高度相关的并发主题. 我在之前已经说过,初学者第一步需要将业务逻辑尽量放到实体或值对象中,给实体“充血”,这样可以让业务逻辑高度内聚,并为你提供业务逻辑的唯一访问点.而聚合则是第二步,它将多个相关业务概念包装到单一的概念中,从而大幅简化系统设计,由于受传统数据建模思维影响,我在聚合方面吃过大亏,花了将近一年才真正用起来,为了你少走弯路,我会把一些要点总结出来供你参考. 什么是聚合? 聚合包装一组高度相关的对象,作为一个数据修改的单

应用程序框架实战十三:DDD分层架构之我见

前面介绍了应用程序框架的一个重要组成部分——公共操作类,并提供了一个数据类型转换公共操作类作为示例进行演示.下面准备介绍应用程序框架的另一个重要组成部分,即体系架构支持.你不一定要使用DDD这样的架构,使用单层架构和普通三层架构一样可以,不过你如果希望获得更进一步的复用性和封装度,使用更加面向对象的技术是必经之程. 我在2010年以前还在使用古老的ASP.NET WebForm和原始的Ado.Net.之前我有个观念:.NET技术发展太快,跟着微软屁股后面跑太累,所以只使用它一些原始的东西,自己封