`
wcleye
  • 浏览: 10133 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

糟糕的代码设计真的让人很心烦..

阅读更多

刚进公司不到一个月, 现在正在进行一个项目开发,项目里使用 Hibernate2 + Struts1.2,正常情况下这是一个相当好的组

 

合,但是现在由于DAO层代码几乎全由MyExclipse 生成,不知是否由于MyExclipse 版本过低,生成的代码中大量使用了继

 

承,而且最主要的,项目管理人几乎没有进行重写的想法,他们的意思是:这些我们都用了很久,都很熟悉了;但是项目项目进度的

 

发展,这些问题也越来越突出,由于采用MyEclipse 自动生成的代码,在调用DAO对象前要先执行初始化,如:

try {
	_BaseRootDAO.initialize();
	dao = XXXDAO.getInstance();
} catch (HibernateException e) {
	e.printStackTrace();
}

 

然后才能调用,我想对它做个封装,可是对它这个初始化实在束手无测,现在我只能简单的把这些业务单独做个类来封闭,让它

 

不与WEB层混淆在一起,但是这样并不能彻底解决问题,我封闭的这些类中重复的代码实在太多,我也试过对这些代码进行重

 

构,可是由于现在项目也经进行到一半了,项目开发由多个人一同进行,我如果更改了原始代码结构,必然会引起别人代码不能

 

正常运行,可是每次自己读到这些代码,特别是自己还要参与到其中,真的很心烦.....

 

我应该如何做呢,难道企业里开发都这样吗? 大家能否给点建议..

分享到:
评论
55 楼 wcleye 2008-08-14  
<div class='quote_title'>gigix 写道</div>
<div class='quote_div'>
<div class='quote_title'>mingr6370 写道</div>
<div class='quote_div'>以目前的情况项目推进到一半,而且开发都已经熟悉代码框架下,去修改代码是很费劲的事情,再说代码也不至于槽糕的要命 <br/><br/>另外LZ刚到新公司,就这么凸显能力,恐怕今后的路子不太平坦,如果要修改也是很隐晦的提出自己的想法,和项目的主要管理者商量,你觉得呢? <br/><br/>如果让LZ很直接的说出来,我觉得会伤害一部分人(就算他说的很对,很有理),对不?</div>
<br/>你要知道,什么事情都不是一下子发生的 <br/>代码不是一下子变坏的 <br/>改进不是一下子改好的 <br/>能力不是一下子凸显的 <br/>这个项目不去一点点积累,那么下个项目还是会和这个项目一样</div>
<p> </p>
<p> mingr6370 说有道理,gigix 说得也不错,只不过你们考虑问题的角度不同,观点其实并不矛盾,mingr6370 说的会伤害一部分人,我考虑到了,所以到现在我没和他们提过,有改动的只是我自己的这块,当然为以后别人代码的改进也留有余地..</p>
<p>gigix 提到的代码不是一下子变好的,这点我现在真的体会到的,不是从书上看到的,也不是听到gigix提到我才这样说,代码是一点点积累才导致它变质的,以至于现在的同事自己都不愿再去碰以前写的东西,我之前这样问过他们:<span style='color: #ff0000;'>你们明明知道这样做不好,为什么不重构下呢? 他的回答彻底让我无语:任何一个系统需求变化到了一定程度就会重做一次</span>,所以没这必要..</p>
<p>基于这点,所以我现在只是打算改变自己的这一部分,让他们自己能看到这样改动后带来的好处,而不是用口去争辩......</p>
<p>我相信事实是最好的证明..</p>
54 楼 gigix 2008-08-14  
mingr6370 写道
以目前的情况项目推进到一半,而且开发都已经熟悉代码框架下,去修改代码是很费劲的事情,再说代码也不至于槽糕的要命

另外LZ刚到新公司,就这么凸显能力,恐怕今后的路子不太平坦,如果要修改也是很隐晦的提出自己的想法,和项目的主要管理者商量,你觉得呢?

如果让LZ很直接的说出来,我觉得会伤害一部分人(就算他说的很对,很有理),对不?

你要知道,什么事情都不是一下子发生的
代码不是一下子变坏的
改进不是一下子改好的
能力不是一下子凸显的
这个项目不去一点点积累,那么下个项目还是会和这个项目一样
53 楼 mingr6370 2008-08-14  
gigix 写道
mingr6370 写道
gigix 写道
mingr6370 写道
吃力不讨好的活还是忍了吧

下次项目技术准备时,提出自己的想法

这话说得很有意思
下次项目,凭什么别人就会听你的?
你不在真实的项目里尝试过,你就不会知道该怎么做才能让代码不变坏甚至变好
于是下次项目你还是没辙


为什么没辙?

只要提出的想法会改进代码,并且说的别人心服口服,为什么不能这么做呢?

如果你换做LZ,现在马上就修改代码吗?多想想LZ目前在公司的状况吧,人际工程比项目工程更难搞

一个问题就能把你噎死
你说这能改进代码,证据呢?
于是,继续等下个项目吧。
既然你也知道人际工程更难搞
项目进行中你还有机会做实事你不建议他去做,却叫他等到下次项目准备这种纯靠沟通技巧的时候去提建议
你这不是往坑里推人么?


怎么叫往坑里推人呢?此话有待商榷

以目前的情况项目推进到一半,而且开发都已经熟悉代码框架下,去修改代码是很费劲的事情,再说代码也不至于槽糕的要命

另外LZ刚到新公司,就这么凸显能力,恐怕今后的路子不太平坦,如果要修改也是很隐晦的提出自己的想法,和项目的主要管理者商量,你觉得呢?

如果让LZ很直接的说出来,我觉得会伤害一部分人(就算他说的很对,很有理),对不?
52 楼 wcleye 2008-08-14  
<div class='quote_title'>mingr6370 写道</div>
<div class='quote_div'>
<div class='quote_title'>gigix 写道</div>
<div class='quote_div'>
<div class='quote_title'>mingr6370 写道</div>
<div class='quote_div'>吃力不讨好的活还是忍了吧 <br/><br/>下次项目技术准备时,提出自己的想法</div>
<br/>这话说得很有意思 <br/>下次项目,凭什么别人就会听你的? <br/>你不在真实的项目里尝试过,你就不会知道该怎么做才能让代码不变坏甚至变好 <br/>于是下次项目你还是没辙</div>
<br/><br/>为什么没辙? <br/><br/>只要提出的想法会改进代码,并且说的别人心服口服,为什么不能这么做呢? <br/><br/>如果你换做LZ,现在马上就修改代码吗?多想想LZ目前在公司的状况吧,人际工程比项目工程更难搞</div>
<p> </p>
<p> 沟通不能完全解决问题,接触任何新东西之前,大家的想法是先看到改变能给我带来什么,是看到不是听到也不是别的...</p>
<p>我觉得一切得用事实说话..</p>
<p> </p>
<p> </p>
51 楼 gigix 2008-08-14  
mingr6370 写道
gigix 写道
mingr6370 写道
吃力不讨好的活还是忍了吧

下次项目技术准备时,提出自己的想法

这话说得很有意思
下次项目,凭什么别人就会听你的?
你不在真实的项目里尝试过,你就不会知道该怎么做才能让代码不变坏甚至变好
于是下次项目你还是没辙


为什么没辙?

只要提出的想法会改进代码,并且说的别人心服口服,为什么不能这么做呢?

如果你换做LZ,现在马上就修改代码吗?多想想LZ目前在公司的状况吧,人际工程比项目工程更难搞

一个问题就能把你噎死
你说这能改进代码,证据呢?
于是,继续等下个项目吧。
既然你也知道人际工程更难搞
项目进行中你还有机会做实事你不建议他去做,却叫他等到下次项目准备这种纯靠沟通技巧的时候去提建议
你这不是往坑里推人么?
50 楼 mingr6370 2008-08-14  
gigix 写道
mingr6370 写道
吃力不讨好的活还是忍了吧

下次项目技术准备时,提出自己的想法

这话说得很有意思
下次项目,凭什么别人就会听你的?
你不在真实的项目里尝试过,你就不会知道该怎么做才能让代码不变坏甚至变好
于是下次项目你还是没辙


为什么没辙?

只要提出的想法会改进代码,并且说的别人心服口服,为什么不能这么做呢?

如果你换做LZ,现在马上就修改代码吗?多想想LZ目前在公司的状况吧,人际工程比项目工程更难搞
49 楼 rtdb 2008-08-14  
习惯问题,只能慢慢改进的。
就算是你运气好,有机会完全重写,
过一两年回头看,还是会发现很多垃圾的。

最近这十几年,是软件开发思想大发展的年代,
从面向过程,到面向对象,
到设计模式,再到面向接口, 直到敏捷的TDD和重构,

以致每次我回头看若干年以前自己的代码时,
在不忍目睹的同时,也骄傲自己的进步。

48 楼 zhanyingle_1981 2008-08-14  
有想法应该要沟通,项目进行中想做大规模的重构,最好是要取得领导的支持,所有人达成共识才行,不然就乱套了
47 楼 wcleye 2008-08-14  
<div class='quote_title'>neo_q 写道</div>
<div class='quote_div'>其实初步看来你的这个问题是可以解决的。如果你可以确定你得到dao的方式是以factory的形式来得而非直接new,那么你在这里使用proxy,返回一个proxy的instance,在proxy里面判断是否已经init过了,没有做过就做init,如果已经做了则直接调用target对象的方法。 <br/>这样既可以满足你每次不调用root class的方法也可以不让你的同事的代码受到影响。</div>
<p><br/><br/>我现在作法: </p>
<pre name='code' class='java'>public Abstractxxxx(Class clazz){
     try {
_BaseRootDAO.initialize();
Class[] type = new Class[]{};
Class[] arge = new Class[]{};
Method method = clazz.getMethod("getInstance", type);
dao = method.invoke(null, arge);
      } catch (Exception e) {
e.printStackTrace();
     }
}</pre>
<p>业务类继承它,在构造方法中执行:</p>
<pre name='code' class='java'>public XXXService(){
super(XXXDAO.class);
dao = (XXXDAO)getDao();
}</pre>
<p> 这样来得到对象实例..</p>
<p> </p>
46 楼 weicanhuang 2008-08-14  
只要不出问题,重构还是算了吧,中途改这个是大忌。

45 楼 happy31 2008-08-14  
leonhe_cn 写道
公司规模太小了吧,我上次到新公司报道,一看项目和楼主一样连spring都没用,马上走人了呵呵


。。。受不了。。。
44 楼 bulargy 2008-08-14  
如果没有老大肯推动重构这件事情,奉劝兄台还是独善其身的好。
这些都是吃力不讨好的事情~~~
43 楼 laorer 2008-08-14  
gigix 写道
我目前的项目,产品代码平均每个方法不到5行

五行?我还有好长的路要走,至少暂达不到
42 楼 gigix 2008-08-14  
mingr6370 写道
吃力不讨好的活还是忍了吧

下次项目技术准备时,提出自己的想法

这话说得很有意思
下次项目,凭什么别人就会听你的?
你不在真实的项目里尝试过,你就不会知道该怎么做才能让代码不变坏甚至变好
于是下次项目你还是没辙
41 楼 mingr6370 2008-08-14  
吃力不讨好的活还是忍了吧

下次项目技术准备时,提出自己的想法
40 楼 gigix 2008-08-13  
laorer 写道
这个应该有点难度吧...
那要写多少个小方法,而且有些代码内聚度比较高的,为什么要拆成多个方法

我目前的项目,产品代码平均每个方法不到5行
39 楼 Allen 2008-08-13  
其实“陈旧”还是要比“不统一”来得要好一些。

各自为战的混乱远比武器落后要可怕……
38 楼 neo_q 2008-08-13  
其实初步看来你的这个问题是可以解决的。如果你可以确定你得到dao的方式是以factory的形式来得而非直接new,那么你在这里使用proxy,返回一个proxy的instance,在proxy里面判断是否已经init过了,没有做过就做init,如果已经做了则直接调用target对象的方法。
这样既可以满足你每次不调用root class的方法也可以不让你的同事的代码受到影响。
37 楼 laorer 2008-08-13  
[quote="gigix可能是我想太多了吧
代码要变好,不是靠“大的代码变更”来达到的
我的标准是,三行以上的代码不应该重复
(当然还有别的标准,例如一个方法不应该超过10行)
发现这样一个小小的不好,你就把它扫干净,于是代码就变好了一点点
一点点积累起来,整个代码库就会变好

(当然还有别的标准,例如一个方法不应该超过10行)
这个应该有点难度吧...
那要写多少个小方法,而且有些代码内聚度比较高的,为什么要拆成多个方法
36 楼 gigix 2008-08-13  
林杰杰 写道
gigix 写道
林杰杰 写道
我估计这代码不是开发人员想写成这样的。
而是开始的时候需要很简单,而他写的代码对于那个需求来说很适合。
只是后来的需求一点点变化,每一次的变化都不足以引起大的代码变更,只是一点点积累起来,成了这模样了。

既然你知道代码质量不是一下子变坏的
为什么又认为它会一下子变好?

貌似我没有说过代码会一下子变好的话。。。

可能是我想太多了吧
代码要变好,不是靠“大的代码变更”来达到的
我的标准是,三行以上的代码不应该重复
(当然还有别的标准,例如一个方法不应该超过10行)
发现这样一个小小的不好,你就把它扫干净,于是代码就变好了一点点
一点点积累起来,整个代码库就会变好

相关推荐

    心烦气躁怎么办.doc

    【心烦气躁怎么办】 心烦气躁是一种常见的心理状态,常常伴随着情绪波动、焦虑、易怒等症状。这种状态可能是由于多种原因导致的,包括生理因素如气血不足,以及心理因素如压力过大、情绪困扰等。中医理论认为,气郁...

    心烦气躁吃什么.doc

    【心烦气躁吃什么】 心烦气躁常常与身体状况,特别是贫血有关。女性由于生理特点,更容易出现这种症状。贫血的主要表现为疲乏、困倦、皮肤黏膜苍白,以及心悸、气短、头痛、头晕等症状。贫血分为轻度至极重度四个...

    2021关于工作心烦的QQ个性签名.docx

    虽然这些句子并不直接与IT知识相关,但我们可以从中提炼出一些普遍的生活智慧和心理调适策略,这些对于任何行业的人都有一定的启示: 1. **自我激励与独立**:“没什么好期待的, 都是要自己办到的。”这句话提醒...

    培训教材之沟通技巧.ppt

    6.如果其他人不同意我的看法,我能做到不心烦,特别是其他人没有我有经验时。 7.当我批评人时,我确信我提到人们的行为,而不是人本身。即工作中对事不对人。 8.我解决问题,能控制感情。 9.提供其他信息让对方明白...

    人教高中英语必修一unit词汇详解PPT学习教案.pptx

    ") 另外,句型 `It upsets sb that...` 描述让某人心烦的事情,例如 `It upset her that he had left without saying goodbye.` ("他不告而别让她心情沮丧。") 3. **ignore** - 动词"忽略,不理睬"。`ignore sb/sth...

    人教高中英语必修一unit 词汇详解PPT课件.pptx

    (那个男孩再次撒谎让老师很心烦。) - What he had done upset his parents. (他的所作所为使他的父母很不开心。) 3. **ignore**: "ignore sb/sth" 意味着忽视或假装没看见、没听见。"be ignorant of" 则表示对…...

    人教新课标高中英语必修一课本单词表.doc

    【人教新课标高中英语必修一课本单词表】是针对高中阶段英语学习者的一份重要资料,包含了必修一课程中的核心词汇。这些单词是学生需要掌握的基础知识,对于提升阅读理解、写作和口语表达能力至关重要。下面将详细...

    高中英语人教版词汇表全必修选修粗体音标.doc

    3. upset: 心烦意乱的,形容情绪不稳定的状态,也可用作动词表示使人心烦。 4. ignore: 不理睬,忽视,表示对某事或某人选择视而不见或不予回应。 5. calm: 平静的,形容词,表示状态平和;(使)平静,动词,用于安抚...

    人体器官讲解.pptx

    例如,心肾不交可能导致心烦失眠,肝郁化火可引起心神不宁,脾虚则可能影响血液生成和运行,肺肾失衡可导致水液代谢异常。中医理论通过调整脏腑间的平衡来治疗疾病,如“补脾益肺”、“健脾燥湿化痰”等方法。 总的...

    人教高中英语必修一unit词汇详解高中精选PPT学习教案.pptx

    `be upset about` 对某事感到心烦,`It upsets sb that` 表示让某人心烦的是。例如: - `I was upset about the bad news.` 我对这则坏消息感到心烦。 - `It upset her that he had left without saying goodbye.`...

    高一英语单词表(人教版).doc

    动词则表示使人心烦或不安。 4. **Ignore** - 不理睬或忽视某事物,表示不给予注意或回应。 5. **Calm down** - 使某人冷静下来,常用于安抚紧张或激动的情绪。 6. **Have got to** - 必须或不得不做某事,与“must...

    人教版高中英语单词表(含音标).doc

    2. `upset`:形容词,表示心烦意乱、不安或不适,动词形式则是使人心烦或不安。 3. `ignore`:不理睬、无视,常用于表示对某事物的忽视。 4. `calm`:使平静、镇定,可用于形容词或动词形式,搭配`down`表示使某人或...

    人教高中英语必修一单词复习PPT学习教案.pptx

    这份资料是针对人教版高中英语必修一的单词复习PPT学习教案,旨在帮助学生巩固和记忆单元一和单元二的重要词汇和短语。在英语学习中,词汇的掌握是基础,也是提升语言能力的关键。 在单元一中,提到了一些重要的...

    (新人教版)2020版高考大一轮复习Unit1Friendship课件必修1(英语).ppt

    例如:It upset him that nobody had bothered to tell him about it.(没有人告诉他这件事让他很烦恼。) - 动词用法:It upsets sb. that...(……让某人心烦),如:It upset me that my application for the ...

    人教高中英语必修一课本单词表.doc

    动词则表示使人心烦或不安。 4. **ignore**: 不理睬,无视,对某事或某人故意不给予关注或回应。 5. **calm**: 形容词,意味着平静或镇定;动词则表示使平静或镇定。 6. **concern**: 表示担忧、涉及或关系,与某事...

    高一英语词汇复习总结必修3 新课标 人教版 试题.doc

    【中学教案】高一英语词汇复习总结必修3主要涵盖了新课标人教版教材中的重要词汇和短语,旨在帮助学生巩固和扩展他们的词汇知识,以提高英语水平。以下是这些词汇和短语的详细解释: 1. **mean doing sth.** 意味着...

    人教版高一英语必修一笔记[1]收集.docx

    【人教版高一英语必修一笔记[1]】主要涵盖了词汇、短语和语法点,以下是这些知识点的详细解释: 1. **调查相关词汇**:`survey` 表示“调查”,`add up` 意为“合计”,如 `add up to` 是“总计达”,`add A to B` ...

    人教版英语必修一单词默写双语版本.pdf

    【人教版英语必修一单词默写双语版本】包含了一系列重要的英语词汇及其用法,以下是其中一些关键知识点的详细解释: 1. **survey** - "调查",在学术研究或数据分析中常用于收集信息。 2. **add up** - "合计",指...

    (人)版高中英语单词表(必修一到必修五音标版本).doc

    3. **upset**:形容词表示心烦意乱,动词形式指使人心烦或不安。 4. **ignore**:忽视,不理睬,对某事物或人不予理睬的行为。 5. **calm**:形容词指平静的,动词形式指使平静或镇定。 6. **have got to**:不得不...

    康复理疗师复习大纲设计.doc

    5. **体质辨识**:体质分为不同类型,如阴虚、阳虚等,不同体质的人有不同的症状表现,如阴虚易见口咽少津、心烦失眠等。 6. **四季养生**:春季养生应减酸增甘,夏季适合进行中药穴位贴敷法治疗慢性疾病,遵循春夏...

Global site tag (gtag.js) - Google Analytics