重构项目问题

Sieeython 发布于 2010/09/04 02:00
阅读 449
收藏 2

描述:

       1.有一个老项目,业务堆积较深,修改起来就更麻烦了。

       2.代码质量不高,且现在不能满足需要。

       3. 业务封装在 MSSQL 存储过程里。

       4. JSP + EJB2 + WebSphere6.x + DWR1.1

想要的结果:

      1. 如何改良这种状况。

      2. 如何使用我的工作更加有效率。

加载中
0
红薯
红薯

如果这个项目正在运行呢,那就要小心了,别一下子全改了,一点点来吧

0
JavaGG
JavaGG

建议一个模块一个模块改,建一个新项目,完全一个模块就上线一个模块,稳定了再整第二个,这样安全点

0
曾建凯
曾建凯

我觉得要分析最大的问题在哪里,并且提出和设计出新的解决方案:

1、有一个老项目,业务堆积较深,修改起来就更麻烦了。那么老的业务的流程理顺否?如果优化,怎么样能再次避免这种情况,同时优化后的代码比老代码能节省多少,带来多少好处?

2、代码质量不高,且现在不能满足需要。这个也要具体化,究竟哪里不行,不能很笼统。

3、业务封装在 MSSQL 存储过程里。这个不说了,sql server都用这个,不过mysql却不提倡。

其他不了解。

重构还是要具体化,量化,如果能从某个地方做切入点,可以一边优化,一边重构。当你优化的代码已经沁入系统的时候,重构的规模其实也已经看到端倪了。

0
Sieeython
Sieeython

恩,谢谢

0
曾建凯
曾建凯

我这几年,做了好几次空降兵,就是负责重构,但不是JSP的,有基于前台的,有基于.net + sql server -> php + mysql的。所以多少能为你提供一点经验。

其实前台的重构,任务量也很大,js、CSS,成千上万行,加上那些模板HTML代码,还不能改后台程序,我当年就是一口气扎身在这样的环境中,三个月(两个月编码,天天写js,从白天干到深夜,程序部对我都服了,当时我隶属设计部,一个月测试部署发布)。而且我决定做重构的时候,经理曾经说过,你不必做这个事情(来证明自己),产品都死了,也没人会去提修正这个产品。但其实在我重构到第二月开始有起色的时候,我知道策划部积压了很久的新需求又都纷纷启动了。

重构除了对代码和项目需求要有把握,还要有明确的想要加入的新元素(仅仅是代码重构,说服不了boss的,那没有创造新的价值),Boss或者客户看重的往往是一次技术改良首当其冲的实际受益面有多少(尤其是对当前项目),一旦这个东西被确认,他们自然会承认你说得潜在的,代码规范,开发模式,等等的好处。

但上述都不是必要的,必要条件是,你要掌握到在某个时段内能架空几个部门的能力(当时在我决定做的时候,经理许诺过会帮我实现这个环境),还有你要有敢于独自承担一切骂名、一切恶果的勇气。

不然不要轻易动手重构,把既有的经验用在新项目中,也许你会成长得更加茁壮。

0
Sieeython
Sieeython

1.  非常理解重构不是一件好事情。JS框架升级,代码规整确实头大

2.  就是业务引擎,系统中大概已有100多个开关项(用来切换个性化功能),还有上升的趋势。

3.  软件外部接口问题,如:webservices,delphi,php (Tools) 等问题。

4.  最后发表感叹:唉!

0
Sieeython
Sieeython

以前用delphi 开发过项目,总感觉被套住的感觉, 于是就只用它来做一些小工具的开发。乐而不疲!

0
曾建凯
曾建凯

我其實很反對過分多的使用外部工具,的確前期會很簡便,但增大了系統的複雜度,而且這種複雜度還會產生無數你無法察覺的黑洞,會困死你(包括RoR那些那麼多的gems和plugin和腳手架,其實在我對Ruby比較熟悉以後,反而漸漸不再依賴那些庫)。

比如之前做一個Oa系統,ORM,MVC都是採用我自己寫的PHP MVC框架集成了。但是卻外部調用了PHPGACL,這個東西設計得很好,但是其實嵌入使用的時候,查詢優化做得還是不夠的,查一個用戶權限要N個子查詢。後來個別開發人員還單獨用php socket去訪問Java service,這個對於他個人來說倒沒什麼,但其實外部的Java service是不太可控的,畢竟團隊明確了以PHP + web為主方向,那就力圖通過php + js + html的模式去解決。

其實也許相應的功能,語言本身就提供了一個基礎,選擇用外部開源項目解決,和通過增強對語言的瞭解,自己寫一個相似的應用,是兩條截然不同的方向。當時為此我和總監爭論了很久,如果做外包,我不反對使用外部的開源項目,但如果是內部OA系統,而且也明確有開發的時間,還是可以儘量自己動手去解決這些問題的。

我很計較外部工具的選型,如果說,一個功能,已經存在很好的外部工具和項目,我也會很欣然的接受,只是我審核的要求會很高,比如我選擇Qt(WPF/SliverLight/Flash/Flex/Swing/SWT/GTK/Qt等等,WPF和sliverlight我還做過許多小東西進行測試),或者選擇了js library的Mootools(prototype/jquery/mootools/extjs,2007年底進行的調研),還有富文本編輯器tinymce(fckeditor/tinymce/sina editor/kindeditor等等),相似功能的東西,我會爭取橫向的做更多比較。像Qt是用C++寫的,我沒法真的去細究其代碼,但js的庫,只要選型圈定了範圍,多少我都會讀讀他的源代碼。

你說道,你們的項目有100多種開關,其實如果換成我處理,如果同樣的重複的實現代碼超過3次以上,我就會考慮通過封裝去解決。封裝未必需要十分精緻,只要足夠寬鬆和富裕的解決你的需要。比如我的MVC框架,封裝了Grid、封裝edit form,並且,直接去調用Db Model配置,view層調用,只要一句函數即可,剩下的就是指定grid具體出現哪幾個字段即可,字段具體值的map(比如,1,2,3對應開放、半開放、封閉等)。如果要為開關設置不同的回調,可以考慮閉包實現(不過貌似Java支持的不太好),比如我之前封裝Js的庫,封裝一個具有某種行為模式的box對象,其實他是基於Mootools的Ajax的事件接口的,但是調用callback的時候,仍然只沿用Mootools Ajax的接口(不自己添加事件了),因為易於被掌握。在封裝內部,再次對同類型的callback進行一次打包,這樣既不會破壞Mootools的Ajax本身,又可以讓自己的box類具有了與Ajax相似的事件接口。

選擇Scala,也是基於他支持JS中相似的語法特性。這也是我最近覺得十分有趣的東西,有空也許我可以貼一些研究的代碼。

0
Sieeython
Sieeython

1. 我也感觉有团队写出来的代码比较可靠,也较与理解。

2. map 问题:使用HashTable 具现化流到数据库 或 xml 配置文件也不错。这样可能装配比较的容易.

3. 閉包问题,javascript 做的很好,java 里面做閉包是类型安全的。使用“面向切面编程”应该可以实现这个功能。

4. prototype/jquery/mootools/extjs 用到的其实也比较少,这个主要是前期开发用到的比较多。

    JS的话我主要看中哪个框架可以让我减少代码量来考量。jquery 是不错。

5. php 语言效率的确好,简直就是专为网页开发而打造的。类型处理非常方便。基本上不用考虑代码写的不合理而产生的资源浪费。

6.Scala extlib 做wap 应用很好,应该是以后的趋势了。

7. 我感觉页面上的一组参数应该是一个对象,抽象越好代码越少。

8. 很想学习一下VC开发项目,一直没机会。还是我英语太差了。最主要的问题应该是国语学太好了。

返回顶部
顶部