- 相關(guān)推薦
J2EE項目開(kāi)發(fā)10大風(fēng)險盤(pán)點(diǎn)
當你開(kāi)始著(zhù)手組織一個(gè)企業(yè)級Java項目的時(shí)候,就如同開(kāi)始同時(shí)輪回地扔好幾個(gè)魔術(shù)小球: 業(yè)主關(guān)系處理、持續而漫長(cháng)的設計開(kāi)發(fā)過(guò)程,以及保持健全與完整性,等等。每一個(gè)“小球”都會(huì )帶來(lái)其固有的風(fēng)險,有些顯而易見(jiàn),有些則不易發(fā)現。盡管如此,所有這些風(fēng)險都是完全可以避免的。下面yjbys為大家準備了一篇分析了威脅到企業(yè)級Java項目成功的10大風(fēng)險, 并一一列出了風(fēng)險規避的策略方法。
在過(guò)去這段時(shí)期里,我擔任過(guò)程序員、高級設計師以及架構設計師等工作,見(jiàn)識過(guò)很優(yōu)秀的企業(yè)級Java項目,也見(jiàn)識過(guò)不好的,甚至很"丑陋"的項目。有時(shí)候我會(huì )自己?jiǎn)?wèn)自己,為什么一個(gè)項目可以取得成功,而另一個(gè)卻走向失敗?很難定義出某種規則或標準來(lái)表明各個(gè)不同的項目應該如何成功,J2EE項目也并不例外。但與此相反的是,我們可以從各個(gè)角度和層次上去考察項目失敗的原因,如果很好地避開(kāi)了這些風(fēng)險,項目就可以取得成功。在本文中,我將提出排名前10位的企業(yè)級Java項目風(fēng)險,供讀者參考。
在各種各樣的風(fēng)險中,有些風(fēng)險只是延緩了項目的進(jìn)度,有些帶來(lái)了一些不必要的工作,而另一些則會(huì )把成功的可能性徹底地消除。不過(guò),如果預先有了足夠的準備和清醒的認識,那么并沒(méi)有不可避免的事情。這好比如果你是一名旅行者,你清楚地知道前面的道路在什么方向,做了充分的準備,又有一位清楚知道哪里有危險的向導,這樣就會(huì )比較順利地到達自己的目的地。
本文采用了以下結構來(lái)描述風(fēng)險:
風(fēng)險名稱(chēng):風(fēng)險的標題(使用粗體)
項目階段:在哪個(gè)項目階段會(huì )發(fā)生風(fēng)險情況
影響階段:會(huì )影響到以后的哪些階段
癥狀: 風(fēng)險產(chǎn)生時(shí)的癥狀
規避方案:如何規避風(fēng)險或者把其對項目的影響降低到最小程度
備注: 風(fēng)險相關(guān)的補充說(shuō)明和提示
通過(guò)對企業(yè)級Java項目的仔細考察,本文將J2EE項目過(guò)程分解為以下幾個(gè)階段:
·提供商選擇: 在開(kāi)始你的J2EE項目之前,要選擇最合適的提供商,從應用服務(wù)器到開(kāi)發(fā)工具組合,一直至工作期間享用的咖啡的廠(chǎng)商。
·設計: 在遵照一系列嚴格的規范和軟件工程方法的前提下,可以開(kāi)始進(jìn)行足夠充分的設計,然后再很自然地進(jìn)入開(kāi)發(fā)階段。在開(kāi)發(fā)之前,要周全地考慮好正在做什么,以及如何往下做的問(wèn)題。另外,我使用了一些設計模板來(lái)確信在進(jìn)入開(kāi)發(fā)之前,已經(jīng)想到了所有的問(wèn)題和可能的解決方案。但是,我有時(shí)也在該階段做一些編碼,有時(shí)候這樣做可以回答一些問(wèn)題,有效地判斷出性能上和模塊劃分上的問(wèn)題。
·開(kāi)發(fā): 也就是程序開(kāi)發(fā)階段,選擇一些好的開(kāi)發(fā)工具,進(jìn)行精良的設計等等,在這個(gè)階段將顯示其優(yōu)越性,并且可以給開(kāi)發(fā)帶來(lái)很大的幫助。
·穩定性/負載測試:在該階段,系統架構師和項目經(jīng)理應該凍結住產(chǎn)品特性,并把焦點(diǎn)放在質(zhì)量以及產(chǎn)品參數(允許的并發(fā)用戶(hù)數量,故障恢復情況,等等)上。質(zhì)量和性能在該階段應得到足夠的重視。當然,最好應該避免在前階段寫(xiě)出不良的運行緩慢的代碼而到本階段來(lái)作很多的修改。
·成熟期:這不是一個(gè)真正的項目階段,而是一個(gè)固定的準備階段。過(guò)去潛伏的錯誤(來(lái)自于糟糕的設計和開(kāi)發(fā)、錯誤的廠(chǎng)商選擇)可能出現并影響你的系統。
OK,以下讓我們進(jìn)入 top 10 項目風(fēng)險!
--------------------------------------------------------------------------------
風(fēng)險1:沒(méi)有真正理解 Java, EJB, 和J2EE
這個(gè)問(wèn)題可以分解為3個(gè)部分,以便于分析。
描述: 沒(méi)有真正理解Java
項目階段:開(kāi)發(fā)
影響階段:設計、穩定性測試、成熟期
對系統性能的影響:可維護性、可擴展性、性能
癥狀:
重復開(kāi)發(fā)了JDK核心API中的功能或類(lèi)
不懂得以下列表中的某些項(這只是一些主題或者實(shí)際例子而已):
垃圾收集器 (train, generational, incremental, synchronous, asynchronous)
對象在何時(shí)能被進(jìn)行垃圾收集 -- dangling references
使用的繼承機制及其權衡
over-riding和over-loading方法
為什么java.lang.String (在這里用你所中意的類(lèi)代替) 提供的性能不好
Java中的pass-by參考語(yǔ)義和EJB中pass-by值的語(yǔ)義的比較
使用 == 或者使用equals() 方法 for nonprimitives
在不同平臺上Java線(xiàn)程的運行順序方式(例如是否是搶先方式的)
新線(xiàn)程和本地線(xiàn)程的比較
Hotspot技術(shù)(以及為什么舊的性能調整技術(shù)降低了Hotspot 的優(yōu)化效果)
JIT,以及什么時(shí)候好的JIT變得不好(未安裝的JAVA編譯器,以及你的代碼運行得剛夠良好)
API搜集
RMI
規避方案:
你需要不斷改進(jìn)Java方面的知識,尤其是深入了解Java的優(yōu)勢和不足之處。Java的存在價(jià)值已經(jīng)遠不止是一種語(yǔ)言,理解平臺(JDK及工具等)也是同樣重要的。具體地說(shuō),你應該是經(jīng)過(guò)認證的Java程序員,如果你不是的話(huà),也許你有時(shí)會(huì )為還有那么多不知道的內容而感到驚訝。另外,你可以加入Java的郵件列表。以前我曾加盟過(guò)的每一個(gè)公司都加入了這樣的郵件列表,從同行中學(xué)到技術(shù),這將是你最好的資源。
備注:
如果你或者你的團隊中的成員不真正了解編程語(yǔ)言和平臺,怎么還能保持成功的希望呢?強干的Java程序員之于EJB和J2EE,就象是鴨子之于水一樣。與此相反,比較弱的、沒(méi)有經(jīng)驗的程序員只能開(kāi)發(fā)出質(zhì)量低劣的J2EE應用程序。
描述: 沒(méi)有真正理解EJB
項目階段:
設計
影響階段:
開(kāi)發(fā)、穩定化
對系統的影響:
維護
癥狀:
EJB在第一次被調用后沒(méi)有再被使用到(尤其是stateless session bean)
沒(méi)有重復利用價(jià)值的EJB
不理解開(kāi)發(fā)者要做什么,容器提供什么
EJB沒(méi)有依照規范定義(fire線(xiàn)程, 加載了本地庫,試圖執行I/O,等等)
解決方案:
要改進(jìn)關(guān)于EJB方面的知識,可以找一個(gè)周末來(lái)閱讀EJB規范 (1.1版有314頁(yè)),然后閱讀2.0規范(524頁(yè)!),這樣可以了解到1.1沒(méi)有定義到的而在2.0規范中補充的內容。EJB開(kāi)發(fā)者從18.1及18.2章節開(kāi)始閱讀是比較合適的。
備注:
不要從提供商的角度去看EJB,要確切地知道規范所支持的標準EJB模型和基于這些模型的特殊應用之間的區別。這也會(huì )有助于你遷移到別的提供商的時(shí)候所用。
描述: 沒(méi)有真正理解J2EE
項目階段:
設計
影響階段:
開(kāi)發(fā)
對系統的影響:
維護、擴展性、性能
癥狀:
"Everything is an EJB"的設計方式
用手工事務(wù)管理取代了容器-提供的機制
自定義方式的安全處理 -- J2EE平臺在企業(yè)級計算中,從表示邏輯到后臺處理,已具有最完整的集成安全架構;但很少用到其全部功能。
解決方案:
學(xué)習J2EE的關(guān)鍵組件,并且了解它們的優(yōu)缺點(diǎn),依次用它們替代每一個(gè)服務(wù);“知識就是力量”在這里是行之有效的。
備注:
只有知識能夠彌補這些問(wèn)題。好的Java開(kāi)發(fā)者會(huì )成為好的EJB開(kāi)發(fā)者,此后也應逐漸成為J2EE得道高手。Java和J2EE知識掌握得越多,設計和開(kāi)發(fā)工作就會(huì )越出色。在設計階段一切都會(huì )有條不紊。
--------------------------------------------------------------------------------
風(fēng)險2: 過(guò)度設計(Over-engineering) (采用 EJB或者不采用EJB)
項目階段:
設計
影響的項目階段:
開(kāi)發(fā)
對系統的影響:
維護、擴展性、性能
癥狀:
過(guò)于龐大的EJB
開(kāi)發(fā)者無(wú)法解釋EJB做什么,以及其間的聯(lián)系
無(wú)法重復使用的EJB、組件或者服務(wù)
EJB啟動(dòng)了新的事務(wù),而該事務(wù)本該由一個(gè)已存在的EJB啟動(dòng)
為了安全,把數據分離級別定得太高
解決方案:
過(guò)度工程化的解決之道直接來(lái)自于極限編程 (XP)方法:用最小的設計和編程來(lái)滿(mǎn)足需求,除此之外別無(wú)它干。除非你需要明確知道今后可能的需求,如將來(lái)的負載要求,或者系統在最高負載下的表現,否則大可不必為系統將來(lái)的情況做太多考慮或猜測。另外,J2EE平臺已經(jīng)定義了可伸縮性及出錯恢復等特性,可以讓服務(wù)器系統為你進(jìn)行處理。
在最小的系統中,只包含一個(gè)個(gè)小組件,這些組件只做一件事,只要把這些要求做到的進(jìn)行實(shí)現,系統穩定性就已經(jīng)得到了提高,而且,你的系統的可維護性會(huì )變得很強,在未來(lái)要增加功能以滿(mǎn)足新的需求也將變得容易。
備注:
除了上面所列方案之外,可以推行設計模式 -- 它們可以顯著(zhù)地改進(jìn)你的系統設計。EJB模型本身也廣泛使用了設計模式。例如,每個(gè)EJB所帶的Home 接口就是Finder和Factory模式的實(shí)例。EJB的remote接口扮演了一種實(shí)際bean實(shí)現的代理,并且對于提供容器的能力也是至關(guān)重要的,這些容器截取調用信號并提供諸如透明(transparent)負載均衡的服務(wù)。忽視設計模式也是危險的一部分。
我常提到要反對的另外一種危險是:僅僅是為了使用EJB而使用EJB。在你的應用中的某一部分可能并不需要EJB,甚至你的整個(gè)應用都不需要。這是過(guò)度工程化所走的極端,而且我確實(shí)也目睹了一些良好的servlet和JavaBean應用被重構為EJB,而這樣做并沒(méi)有很好的技術(shù)上的理由。
--------------------------------------------------------------------------------
風(fēng)險3: 沒(méi)有將業(yè)務(wù)規則和邏輯表現形式相分離
項目階段:
設計
影響的項目階段:
開(kāi)發(fā)
對系統的影響:
維護、擴展性、性能
癥狀:
過(guò)于龐大、沒(méi)有邊際的JSP程序
在業(yè)務(wù)邏輯改變的時(shí)候必須修改JSP
在要求改變界面顯示的時(shí)候需要修改并重新配置EJB和其它后臺組件
規避方案:
J2EE平臺使你有機會(huì )將表示邏輯和導航控制相分離,進(jìn)而與業(yè)務(wù)規則相分離。這被稱(chēng)為模式2結構。
備注:
可以使用具有一致性的設計來(lái)進(jìn)行用戶(hù)界面框架的連接。(例如可以使用taglib),這將幫助你避免邏輯分離的問(wèn)題。有許多現成的好的方法可供選擇。對每一個(gè)分別進(jìn)行評估,然后采用最合適的框架。
--------------------------------------------------------------------------------
風(fēng)險4: 沒(méi)有在開(kāi)發(fā)環(huán)境中進(jìn)行適當的配置
項目階段:
開(kāi)發(fā)
影響的項目階段:
穩定化、并發(fā)、成熟期
對系統的影響:
你的權衡
癥狀:
經(jīng)過(guò)多日或數周的時(shí)間才能過(guò)渡到成熟系統
風(fēng)險存在與過(guò)渡期,帶有很多不確定性,有些主要的功能場(chǎng)景沒(méi)有被測試到
實(shí)際系統中的數據和開(kāi)發(fā)、測試中的數據不同
無(wú)法在開(kāi)發(fā)者機器上進(jìn)行組建
應用行為在開(kāi)發(fā)、穩定化及產(chǎn)品環(huán)境中各不相同
規避方案:
解決之道是忠實(shí)地在開(kāi)發(fā)環(huán)境中配置實(shí)際的環(huán)境,讓開(kāi)發(fā)所用環(huán)境接近于要實(shí)施產(chǎn)品的環(huán)境。如果未來(lái)環(huán)境是JDK 1.2.2及Solaris 7,那么不要在JDK 1.3及Red Hat Linux上進(jìn)行開(kāi)發(fā)。對于所用的應用服務(wù)器也是如此。同樣,要快速地看一下產(chǎn)品數據庫中的數據,并將這樣的數據用于測試。不要依賴(lài)于人工創(chuàng )建的數據。如果產(chǎn)品數據很敏感,則要使之變得不敏感,然后把它配置起來(lái)。開(kāi)發(fā)中未能預期到的產(chǎn)品數據將對以下過(guò)程產(chǎn)生破壞:
數據檢驗規則
系統測試行為
系統組件構建(特別地包括:EJB-EJB以及EJB-數據庫)
最為糟糕的是,這樣還可能產(chǎn)生異常、空指針,以及你從沒(méi)見(jiàn)過(guò)的問(wèn)題。
備注:
開(kāi)發(fā)人員常把安全性問(wèn)題放到穩定化階段才開(kāi)始解決。要防止這樣的陷阱產(chǎn)生,你也可以花費同樣多的時(shí)間在業(yè)務(wù)邏輯中改進(jìn)安全性。
成熟期是一個(gè)復雜的過(guò)程,其中充滿(mǎn)了技術(shù)性問(wèn)題和非技術(shù)性問(wèn)題。你可能會(huì )陷于想不到的一大堆問(wèn)題中,這就是成熟化所意味的一切。開(kāi)發(fā)及穩定化環(huán)境過(guò)程為你提供了制造更多這樣的問(wèn)題,以及發(fā)現這樣的問(wèn)題的地方,不斷去做,就可以大大減少風(fēng)險。
你做的工程越多,你就越能了解什么是可行的,什么是不可行的。你可以對工程問(wèn)題進(jìn)行記錄,以避免同樣的錯誤重復發(fā)生。
--------------------------------------------------------------------------------
風(fēng)險5: 選擇了錯誤的提供商
項目階段:
提供商選擇
影響階段:
設計、開(kāi)發(fā)、穩定化/負載測試,成熟化
對系統的影響:
可伸縮性、性能、可維護性及穩定性
癥狀:
開(kāi)發(fā)人員要使用更多的時(shí)間來(lái)處理工具方面的問(wèn)題,而不是很有成效地使用這些工具
為了應付已知的和未知的問(wèn)題,而不得不進(jìn)行顯著(zhù)的系統重新設計
在不同的工具之間很難進(jìn)行集成(應用服務(wù)器與IDE工具,IDE工具與調試器,源碼控制與合成工具,等等)
對于IDE工具和調試器等,開(kāi)發(fā)人員往往排斥它們,而推崇自己所喜歡的工具
規避方案:
為了避免風(fēng)險5,你需要一個(gè)很好的提供商選擇過(guò)程,風(fēng)險10的規避也適用于此。
要真正衡量一種IDE工具是否最合適的方法是真正地進(jìn)行使用。而唯一來(lái)評估一種J2EE應用的方法是建立一種概念試驗來(lái)進(jìn)行證明,在試驗中要包含你的應用框架。事實(shí)上,你也不希望在花費了3個(gè)月時(shí)間進(jìn)行了培訓和開(kāi)發(fā)后,在使用時(shí)又發(fā)現一些bug。
假設在開(kāi)發(fā)到一半的時(shí)候,突然發(fā)現你的工具集有問(wèn)題,那么你早應該知道,有些工具確實(shí)比另一些更重要。如果你所選的應用服務(wù)器不能充分滿(mǎn)足你的需要,你只好修改原先的設定。如果IDE不好,則需要設置最低限度的代碼標準,并讓開(kāi)發(fā)人員任意選擇他們認為最為有效的工具。
備注:
要真正了解到哪一個(gè)供應商對一項特殊的任務(wù)來(lái)說(shuō)最合適,其實(shí)并不是一件一次性決定的事情。你需要不斷地跟蹤與評估這個(gè)市場(chǎng)。例如,在過(guò)去的一年里我用過(guò)4種不同的IDE工具,這取決于我使用了什么樣的應用服務(wù)器、平臺,是否使用EJB等。
--------------------------------------------------------------------------------
風(fēng)險6: 不了解你的提供商
項目階段:
提供商選擇
影響階段:
提供商選擇階段后面的所有階段:設計、開(kāi)發(fā)、穩定化/負載測試、成熟化
對系統的影響:
可維護性、可伸縮性、性能
癥狀:
開(kāi)發(fā)所用周期超過(guò)了最壞預測的周期1/3以上
提供商已經(jīng)提供了某項功能,但開(kāi)發(fā)者在不知道的情況下重新進(jìn)行了該項功能的開(kāi)發(fā)
規避方案:
為了規避這樣的風(fēng)險,你可以盡可能地訂閱提供商的網(wǎng)上資源,例如郵件列表、新聞組、版本信息(尤其是其中的bug修復補丁的說(shuō)明等),你能從中得到無(wú)法估量之多的收獲。
一旦你已經(jīng)選定了提供商,那么立即就要投資進(jìn)行培訓,并且盡可能趕在項目啟動(dòng)以前。然后,逐漸在團隊中建立起對此提供商的認識及信任。試著(zhù)建立幾個(gè)EJB并部署一下,再用你的表示層技術(shù) (Swing GUI, JSP等)來(lái)調用它們。如果你既要搭建開(kāi)發(fā)環(huán)境,又要同時(shí)在實(shí)現項目目標,就會(huì )產(chǎn)生一些不必要的沖突。實(shí)際上,我也見(jiàn)到過(guò)一直沒(méi)有進(jìn)行構建過(guò)程的情況:“我們沒(méi)有時(shí)間。”因此,這些工作必須提早進(jìn)行。有些人會(huì )說(shuō):“我們的計劃中沒(méi)有為我們提供這些時(shí)間。”我的回答是:“你的計劃中并沒(méi)有不給你時(shí)間使你不這么做啊。”
備注:
在J2EE世界里,各提供商產(chǎn)品的技術(shù)兼容性究竟如何?讓我們看一下IBM和BEA的具體分析吧。兩者都分別在各自的應用服務(wù)器中支持EJB 1.1。那么,實(shí)際上BEA WebLogic 5.1和IBM WebSphere 3.5究竟有多少相似之處呢?
BEA WebLogic和IBM WebSphere的系統配置和管理方式幾乎完全不同。
IBM在WebSphere中采用了全面的GUI環(huán)境,而與之相對的是,BEA 在WebLogic中提供一整套命令行。
IBM WebSphere使用IIOP來(lái)和CORBA異常進(jìn)行通訊,這些異常對程序員來(lái)說(shuō)是可見(jiàn)的;WebLogic根本沒(méi)有CORBA構造,而缺省使用t3協(xié)議。
WebSphere和Visual Age銜接緊密,而WebLogic是IDE無(wú)關(guān)的,實(shí)際上,你幾乎可以使用任何的開(kāi)發(fā)工具。
由此可見(jiàn),差異還是相當多。如果你是一種應用服務(wù)器的專(zhuān)家,并不意味著(zhù)你就是所有應用服務(wù)器的專(zhuān)家。這種區別體現在IDE,debugger,build工具,配置管理等等方面。具備某提供商的某項特殊工具的使用經(jīng)驗,可以在評估該提供商的競爭對手產(chǎn)品時(shí)具有一些便利。但是,不要奢望在不同產(chǎn)品之間進(jìn)行無(wú)縫的轉移或銜接。因此,你不得不花費足夠多的時(shí)間在熟練掌握這些工具上。
--------------------------------------------------------------------------------
風(fēng)險7: 設計中沒(méi)有充分考慮到可伸縮性和產(chǎn)品性能
項目階段:
設計
受影響的項目階段:
開(kāi)發(fā)、負載測試及成熟化
對系統的影響:
可伸縮性、性能、可維護性
癥狀:
無(wú)法忍受的速度緩慢
系統給服務(wù)器端增加的沉重負擔,而無(wú)法利用到一些聚簇技術(shù)。
規避方案:
把精力集中于性能和可伸縮性方面的需求,明確開(kāi)發(fā)中要達到的性能指標。如果你需要每秒50個(gè)事務(wù),而你的EJB設計只能提供40個(gè),那么你就需要考慮替代方案,諸如存儲過(guò)程,批處理,或者重新考慮OLTP的設計。
盡可能讓你的提供商加入進(jìn)來(lái),他們應該非常清楚其產(chǎn)品的強項和弱處在哪里,然后給你提供最直接的幫助。
備注:
本風(fēng)險與風(fēng)險2 (over-engineering)似乎有些沖突。實(shí)際上,兩者相互影響。 我對風(fēng)險2給出的解決方案是,只在絕對必要的情況下才進(jìn)行構建。而對與性能和可伸縮性,你要預先劃分好什么是必須要做的。
如果你實(shí)現就識別出系統需要非常強的可伸縮性,并把它作為一個(gè)比較關(guān)鍵的需求,那么你首先需要選擇一個(gè)帶有很強的簇支持及事務(wù)型緩存的應用服務(wù)器。另外,你應把業(yè)務(wù)對象設計為EJB,從而可以充分利用服務(wù)器架構的優(yōu)勢。 XP也沒(méi)有問(wèn)題,你仍然是只做絕對必要的工作。
我把這樣的觀(guān)點(diǎn)看作是一種檢查和平衡的方法。我們只需要最簡(jiǎn)單可能性的系統,該系統只提供客戶(hù)所需要的功能與行為即可。
--------------------------------------------------------------------------------
風(fēng)險8: 陳舊的開(kāi)發(fā)過(guò)程
項目階段:
開(kāi)發(fā)
影響階段:
穩定化,成熟化
對系統的影響:
可維護性、代碼質(zhì)量
癥狀:
項目計劃看上去似乎類(lèi)似于瀑布模型: “首先草構設計,然后在一個(gè)很長(cháng)的周期里進(jìn)行開(kāi)發(fā)。”
由于不存在構建(build)過(guò)程,每次構建都象是噩夢(mèng)
構建的日期等于損失開(kāi)發(fā)的日期,因為什么也沒(méi)有做成
在集成以前組件沒(méi)有分別被充分地測試過(guò),而集成測試意味著(zhù)將2個(gè)不穩定的組件放在一起,然后查看堆棧里的跟蹤結果。
規避方案:
好的軟件方法學(xué)將提高你的軟件生命期。此前我已經(jīng)提到XP方法,你可以在網(wǎng)上找到很多這方面的資料。
備注:
JUnit可以用來(lái)進(jìn)行單元測試,Ant工具可以進(jìn)行編譯與構建,這2種工具都對XP方法有很好的支持。
--------------------------------------------------------------------------------
風(fēng)險9: 沒(méi)有好的架構方式
項目階段:
開(kāi)發(fā)
影響階段:
開(kāi)發(fā)、穩定化、成熟期
對系統的影響:
可維護性、可伸縮性、代碼質(zhì)量
癥狀:
在代碼中使用了很多次的核心庫中發(fā)現Bug。
沒(méi)有建立日志標準 -- 于是系統的輸出很難讀取或者解析。
不良的不一致的異常處理。在有些站點(diǎn)中我們甚至可以看到,出錯信息直接暴露給了最終用戶(hù),例如在用戶(hù)在他的購物車(chē)核帳時(shí)發(fā)送一條SQLException堆棧跟蹤信息,用戶(hù)接著(zhù)會(huì )怎么做?打電話(huà)給數據庫管理員要求對primary key約束進(jìn)行修補嗎?
以下任務(wù)已經(jīng)被開(kāi)發(fā)者以各種方式處理了無(wú)數次了,這些都有必要放在任何構架設計的第一批目標中。
日志
異常處理
與資源的連接(數據庫,名字服務(wù)等)
構建JSP頁(yè)
數據合法性檢查
規避方案:
我是一個(gè)輕方法學(xué)的信徒和實(shí)踐者。我在JavaWorld 上的第一篇文章 -- "Frameworks Save the Day" -- 就是研討在企業(yè)Java環(huán)境中的架構。即使你已經(jīng)開(kāi)始開(kāi)發(fā)了,此時(shí)考慮一下架構仍然是值得的?赡苣悴坏貌蝗淌芤幌轮貥嫀(lái)的異常處理和日志處理,但從長(cháng)遠來(lái)看還是值得的,這樣即省時(shí)間又省錢(qián)。
備注:
讓我們想一下在構架中基于組件開(kāi)發(fā)的可重用性的不同等級。第一級別是plumbing,具有0.9以上的可重用比例,也就是說(shuō),有90%的項目可以對它重復利用。 服務(wù)定義得越詳細,重用比例就越低。換句話(huà)說(shuō),我需要構建一個(gè)會(huì )計服務(wù),但要提供這些資源與用法的管理,以便于其它50%項目中可以對它們進(jìn)行重復利用。但是對那些項目來(lái)說(shuō),能得到這些資源,那真是太好了!
--------------------------------------------------------------------------------
風(fēng)險10: 項目計劃和設計基于市場(chǎng)效應,而脫離了技術(shù)現實(shí)
備注: 不斷有新人加入到Java/EJB的開(kāi)發(fā)領(lǐng)域中來(lái),不理解Java的人數一般比想象中還要多。
項目階段:
所有階段都會(huì )受到影響,包括提供商的選擇
影響階段:
所有階段都會(huì )受到影響
對系統的影響:
可維護性、可擴展性、設計質(zhì)量、代碼質(zhì)量
癥狀:
輕率地進(jìn)行技術(shù)決策,認為EJB只是為了便攜式處理的方便
選擇提供商的時(shí)候沒(méi)有隨即進(jìn)行產(chǎn)品的試用
在項目的生命周期內還需要更換工具
規避方案:
不要輕易相信項目外部的任何人的看法,這些人可能已經(jīng)有一些既得利益,不要相信提供商的說(shuō)法(除非你早已經(jīng)了解),也不要相信白皮書(shū)。如果你要取得來(lái)自真實(shí)世界的關(guān)于應用服務(wù)器的建議,可以在網(wǎng)上取得。你還可以下載這些工具進(jìn)行評估,用它們做一些原型,并運行一下其中的樣例。(好的提供商都有這樣的樣例)。
總的來(lái)說(shuō),為你的項目選擇最好的提供商及工具需要時(shí)間,而你可能沒(méi)有太多的時(shí)間。你可以把選擇范圍限制在3-4個(gè)對象,然后用一周時(shí)間進(jìn)行比較和檢驗。最后從中選出比較滿(mǎn)意的工具和產(chǎn)品。
備注:
如果你缺少J2EE經(jīng)驗,則可能會(huì )在項目前期就產(chǎn)生問(wèn)題。在前期所確定的決策會(huì )影響整個(gè)過(guò)程,并進(jìn)而影響項目的成功。好的J2EE咨詢(xún)專(zhuān)家將能夠幫助你選擇好的提供商,并為設計和開(kāi)發(fā)刻劃出一個(gè)好的構形。
--------------------------------------------------------------------------------
僅僅只有這10項風(fēng)險嗎?
10只是一個(gè)特定的數字,顯然,還有更多更多的風(fēng)險會(huì )存在。只是我可以保證的是,如果你克服了所列的各項風(fēng)險,那么你的項目會(huì )有出色的表現并已打好了成功的基礎。
還有一項需要注意,即沒(méi)有任何東西可以代替經(jīng)驗和計劃。如果你沒(méi)有經(jīng)驗,那么一定要想辦法取得并積累。千萬(wàn)不要一邊做項目一邊進(jìn)行培訓。在開(kāi)發(fā)之前要預先做好充分的準備,最好是在設計以前就進(jìn)行準備?梢宰屇愕膱F隊接受Java/J2EE顧問(wèn)的指導,并確保這樣的指導能夠傳遞到整個(gè)其他的團隊成員。
【J2EE項目開(kāi)發(fā)10大風(fēng)險盤(pán)點(diǎn)】相關(guān)文章:
J2EE項目開(kāi)發(fā)風(fēng)險匯總08-03
Eclipse j2ee開(kāi)發(fā)環(huán)境的搭建12-26
Java Web開(kāi)發(fā)和J2EE的區別07-07
J2EE項目中的異常處理01-22
J2EE項目代碼編寫(xiě)規范01-23
j2ee應用技術(shù)開(kāi)發(fā)結構10-21
項目采購風(fēng)險管理的探究05-30