南京袁永福 报表软件 C#.NET ASP.NET

南京PX(对二甲苯)项目,这是个问题。
三位一体的电子表单工具,同时支持WinForm表单,HTML表单和XSLT表单,表单模板在B/S和C/S下具有相同的用户体验. ---- C#.NET新型报表工具,支持WinForm和ASP.NET,WEB报表工具.
袁永福 江西九江人 2001年东南大学动力系毕业 电子邮箱:yyf9989@hotmail.com QQ群:41118220

看到一个粗制滥造的程序所感

    最近刚到一个公司上班,公司发出去了一个外包项目要接收,一个用C#开发的C/S程序,我就跟着领导跑去接收,事先我问领导关于这次接收的指导思想,领导说这是朋友关系做的外包,不必挑刺。跑过去看了他们的程序,领导说还不错,我也刚来不清楚,于是程序交接,钱也付了。

    回来看程序,傻眼了,只有低质量的源代码,缺少文档。我工作5年,亲自写下了数十万行程序,虽然没人教,但各种编程规范还是摸索得透彻。这个外包程序的代码有些不入我的法眼,对此我能忍受。领导说这个程序要搞单机版,而这个程序里面有不少存储过程和触发器,这得改,我的数据库水平很平庸,但也认了。

    最近发现一个问题,程序需要维实时护界面上的一些状态标记,这些状态信息来自数据库,他到好,窗体上放了定时器,300毫秒的间隔,每次连接数据库,查询不少数据,然后关闭数据库。如此高频度的查询数据,我还是第一次看到,这导致的直接结果就是用户毫无操作但CPU使用率却是100%。如此的写程序可以说是毫无常识。一个客户端都如此,那用不了几个客户端,再强大的数据库服务器也会崩溃。

    这时我就感叹,C#是一流的编程语言,使用的是最先进的VS.NET IDE 2005,可惜写出了三流的程序。有些人抱怨这个编程语言慢,那个框架反应迟钝。其实很多是自己的程序的问题。此处建议各位同学少参合语言框架之争,多埋头打理自己的程序吧。

    此处我得出一个教训,对别人的仁慈就是对自己的残忍,对于外包,在正常情况下,应当借着甲方的身份严把质量关,因为不管怎样,程序最终还是我们自己维护的,粗制滥造的程序最终会让我们头痛。此时不必为了一些面子而破坏我们的美好生活。

袁永福( http://www.xdesigner.cn ) 2006-10-26

posted on 2006-10-26 12:10 袁永福 阅读(3566) 评论(35)  编辑 收藏 网摘

评论

#1楼  2006-10-26 12:50 Cure      

这种角色比较难受,接收的时候挑问题是不给领导面子,到最后出了问题又得赖到楼主头上。   回复  引用  查看    

#2楼  2006-10-26 12:52 lixiong      

烂代码的cost低阿   回复  引用  查看    

#3楼  2006-10-26 13:01 无语[匿名] [未注册用户]

无语啊,现在有些人,一点OO思想都没有,就只会连接数据库,填充dataset,然而却极度自负,一点紧迫感都没有,哎,也没想着要充电,而是在混   回复  引用    

#4楼  2006-10-26 13:01 曲滨      

哎也不能癞对方有时候问题是多样性的
也许对方是初学者
或者也是老板比较急,没怎么设计
就胡乱写了。   回复  引用  查看    

#5楼  2006-10-26 13:21 深夜醉猫      

比较赞同三楼的观点!   回复  引用  查看    

#6楼  2006-10-26 13:40 无赖.net      

强烈赞同三楼的观点!造成垃圾项目的直接原因,个人认为是PM的错,PM技术不达标,下面的人跟处来的项目就直接垃圾。   回复  引用  查看    

#7楼  2006-10-26 14:21 悟空      

"领导说这是朋友关系做的外包,不必挑刺"
这年头,能做得好的反而常没机会,这是上天故意安排。
有项目找合适的人做难,找项目做更难!   回复  引用  查看    

#8楼  2006-10-26 15:12 netprawn[匿名]      

我今年暑假就碰到这种情况,那时候是做短工,给一个公司做网站,就我一个人,美工,代码全是我一个人,所有的资料收集,数据输入也都是我一个人,老板急的天天在旁边看着我写,狠不能让我一天工作20个小时,没有半点设计,就开始做了,一个页面一个页面的做,全是代码的堆砌。现在那个程序我自己都不想看。郁闷!   回复  引用  查看    

#9楼  2006-10-26 15:14 DELL网站 [未注册用户]

有同感   回复  引用    

#10楼  2006-10-26 16:02 nomore [未注册用户]

没能力改变,就适应它吧!   回复  引用    

#11楼  2006-10-26 16:08 aspnetx      

验收过程存在严重问题   回复  引用  查看    

#12楼  2006-10-26 16:50 沐枫      

最近发现一个问题,程序需要维实时护界面上的一些状态标记,这些状态信息来自数据库,他到好,窗体上放了定时器,300毫秒的间隔,每次连接数据库,查询不少数据,然后关闭数据库。如此高频度的查询数据,我还是第一次看到,这导致的直接结果就是用户毫无操作但CPU使用率却是100%。如此的写程序可以说是毫无常识。一个客户端都如此,那用不了几个客户端,再强大的数据库服务器也会崩溃。
--
博主说一下这个问题如何解决?   回复  引用  查看    

#13楼  2006-10-26 16:56 faqi [未注册用户]

有时候为了赶进度,是不会去计较技术上的东西的   回复  引用    

#14楼 [楼主] 2006-10-26 17:15 新型报表工具 xdesigner      

@沐枫
程序刚接收,不管了,注释先。   回复  引用  查看    

#15楼  2006-10-26 18:06 henry      

话也说会来,即使有时间给你做了设计。
也不能保证项目在后期不会一团糟,有可能你前期的精心设计说不定会导致你后期举步为艰。   回复  引用  查看    

#16楼  2006-10-26 18:31 阿标      

最近发现一个问题,程序需要维实时护界面上的一些状态标记,这些状态信息来自数据库,他到好,窗体上放了定时器,300毫秒的间隔,每次连接数据库,查询不少数据,然后关闭数据库。如此高频度的查询数据,我还是第一次看到,这导致的直接结果就是用户毫无操作但CPU使用率却是100%。如此的写程序可以说是毫无常识。一个客户端都如此,那用不了几个客户端,再强大的数据库服务器也会崩溃。
---
纯粹查询的话应该不会造成CPU100%,而是在查询过程中比如用了过多的迭代,或欠入了过多的子查询,而子查询又是直接访问数据的...,好多程序都是这么做的。   回复  引用  查看    

#17楼  2006-10-26 18:50 Michael-_-Young      

@阿标
@沐枫

偶最近也接手了这样一个烂摊子,个人觉得这要视情况对待,如果数据库数据是实时更新的,那么我的想法是在服务器端按照事件触发向客户端广播。如果是纯粹的静态数据,就更没必要了   回复  引用  查看    

#18楼  2006-10-26 23:01 沐枫      

300毫秒。。。如果100%的cpu占有率是这个造成的,可以暂时先改成1000-5000毫秒,相信其间的差别用的人看不出来。   回复  引用  查看    

#19楼  2006-10-27 00:09 发条木偶      

实时的并不是要很快。实时的意义在于在指定的时间内完成某个操作。在非实时系统上面除了定时器以外没有什么更好的方法解决定时的问题。他CPU100%占用的问题可能是定时器没有放在一个独立的进程以内,或者这样做了带来的负面效果。

据做过实时操作系统(VxWork)上应用的一哥们说,系统会提供相应的API来搞定这个问题,而且时间精度要比分时系统上的定时器的精度高。但是我从来没有做过实时系统上的应用。   回复  引用  查看    

#20楼  2006-10-27 00:40 lazylu      

@发条木偶
你说的实时恐怕和帖主说的实时不是一回事。   回复  引用  查看    

#21楼  2006-10-27 09:08 ∈鱼杆      

有时候项目赶的紧根本没时间设计。其实最后就是代码的堆积,只能是看自己水平了,尽量让代码复用的多。   回复  引用  查看    

#22楼  2006-10-27 09:39 李学斌      

我想我的情况可能比你的还要糟,今年四月有一个项目是用DELPHI做的,该项目的负责人要走,公司里没人能接,因我有过Delphi的开发经验所以就让我接了。情况很糟!无文档、编辑思路怪异!。。。   回复  引用  查看    

#23楼  2006-10-27 09:56 LirenZhao      

谁接手别人的程序都有这种感觉,什么思路怪异啊我认为属于发牢骚。
有可能是你的思路有问题也不一定。
现在的程序员总是喜欢全盘推翻别人的代码,然后说如果我自己搞怎么怎么样....
别生气,其实我也是这样的人   回复  引用  查看    

#24楼  2006-10-27 13:05 yi      

再好的设计有什么用,最后还是一堆垃圾的代码的生成,
再往后就是垃圾的程序拿给我们的用户
技术的提高才是最根本的,不要否定,大家都人认了吧
不过不要全盘推翻,毕业人家还是满足了业务需求了,否则到头来,吃苦的还是自己   回复  引用  查看    

#25楼  2006-10-27 14:49 发条木偶      

@lazylu
300ms的速度,还要定时器。那肯定要求时间精度达到这个要求。但是它的查询能不能在这个时间内完成,我觉得并不能保证。

他的代码不是实时的,但是我认为任务性质却是实时的。   回复  引用  查看    

#26楼 [楼主] 2006-10-27 15:05 新型报表工具 xdesigner      

咳,只是个信息管理系统,这个代码只是尽快反映当前数据状态而已,300毫秒和500毫秒没什么区别。只是我认为尽快反映状态也不能这么样的反映啊。应当数据变了才刷新。   回复  引用  查看    

#27楼  2006-10-27 16:17 发条木偶      

哈哈,小题大做了?   回复  引用  查看    

#28楼  2006-10-31 16:01 shengfang [未注册用户]

你不查询怎么知道数据变了   回复  引用    

#29楼  2006-11-17 11:17 Wu.Country@侠缘      

这种情况用多线程加消息机制是最好了。
开一个线程专门访问数据库,每次取得新数据后再通知应用程序。
300毫秒,而且用计时器,就算时间精度要求这样也不能这样做。要考虑实现情况呀。
开个线程,它能完成多少就是多少。否则强行给300MS又有什么用呢?   回复  引用  查看    

#30楼  2006-11-17 17:26 applegreen      

夹心饼干   回复  引用  查看    

#31楼  2006-11-20 20:17 mays [未注册用户]

到底这种代码该如何写!?不查询怎么知道数据库变化啊!?   回复  引用    

#32楼  2006-12-27 18:36 小于[匿名] [未注册用户]

如果用Applet+Server就好了。
关键的技术:
Applet中打开一个HttpConnection并且一直循环负责接受/发送数据。
在Server端有一个Application负责数据的处理,把处理后的数据通过本机的端口发到Server中。记得以前做了一个Scada系统把实时数据保存到数据库中,然后由Server建立同DB的连接,勉强可以满足用户的需求,看来实时数据还是放到内存中好。在applet中负责实时数据的显示。   回复  引用    

#33楼  2007-01-08 22:11 老水手 [未注册用户]

这个实时刷新的问题,我看可以考虑使用观察者模式。   回复  引用    

#34楼  2007-09-17 14:05 兽 [未注册用户]

呵呵.深有同感阿.没办法,谁让咱们是打工的.   回复  引用    

#35楼  2008-06-24 16:01 蜗牛身上的一只蚂蚁      

同意三楼的啊。再次同意三楼的啊。不管怎么样。都得时间冲电啊,。。。   回复  引用  查看    





标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-10-26 12:16 编辑过
Google站内搜索

China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》

相关文章:

相关链接: