打基礎
Bruce Tate
總裁, J2Life, LLC
2005 年 5 月 30 日
輕量級開發是一個很大的主題,開發人員經常提到這個術語,但卻很難講明它的意思。本文是一系列講述輕量級開發的文章中的首篇,介紹了該技術背后的核心原則及原理。
1990 年,我發現了白水漂流并深深愛上了它。我們哪怕是經過最小的湍流,都會留一個人在湍流尾部,兩個人在岸邊用繩索拽著。我們認為這可以防止任何糟糕的事情發生。雖然看起來一切盡在掌握,只是有些不太實際。我們還學會了從船艙觀察普通的湍流,并設法互相協作。對于大多數危險的湍流,我們花費了更多的時間來保障安全,但是只有少數情況下,這些措施才起到重大的作用。
在漂流過程中,使用一種起源于東南部湍急河流的輕量級策略,為我節省了時間,使我可以劃得更遠,玩得更開心,而無需過多考慮安全問題。在業務領域,輕量級開發讓您可以按時完工,積極響應客戶,從而節省時間和金錢。
在本系列的文章中,我關注于輕量級開發(曾經有太多含義的術語)的基礎。本篇文章作為第一篇,為讀者打好基礎,同時對輕量級開發做出定義。后面的文章由淺入深地講述從過程到原則最后到工具的知識。我也將在更高的級別上關注原理和架構的實現,并且提供具體實現的代碼。
本系列面向沒有經過太多輕量級開發的讀者。如果您已使用了兩年的 Spring 輕量級容器和敏捷過程,您可能會收獲更多。如果您在傳統的開發過程中使用 Enterprise JavaBeans?(EJB),但想要轉向輕量級開發,那么本系列就是為您準備的。
我更多地是想在這場席卷整個 Java? 技術社區的潮流中,做一些自己的貢獻。輕量級 這個噱頭為諸如 Spring 和 Pico 這樣的容器增添了幾分優雅。并且,一些源自輕量級過程的技術,如自動化單元測試,現在也滲透到了很多開發工作室中。
戳穿針對輕量級開發的謠言
“輕量級開發”通常與一套開發方法、框架和設計原理一起使用。
- 輕量級方法 包括敏捷過程,例如極限編程(XP)和 Scrum。它們強調開發中測試第一,積極調動客戶和重構。
- 輕量級框架 鼓勵人們使用簡單原始的 Java 對象(POJO)編程,而不是類似 EJB 的重量級面向組件模型。
- 輕量級設計模式 使您可以在對象和集成服務之間進行松散耦合,而無需艱苦地編寫業務邏輯或領域模型。
當我們研究這些思想和技術時,您將會學到更多關于它們的知識。但是首先讓我們戳穿一些謠言。
謠言:輕量級開發只是一種“玩具”技術。
許多開發工具,如 Microsoft? Visual Basic 或 PHP,它們通常不能駕馭或管理大型企業項目,因此得到了“玩具”的稱號。像 Spring 和 Hebernate 這樣的輕量級技術就常常因此而黯淡。實際上,大多數輕量級技術用于了企業開發,因為其他技術都使我們非常失望。Spring 框架就是作為代替 EJB 的一種輕量級技術。同樣,XP 方法吸收改進了企業中的錯誤設置。我在獲得 Jolt 大獎的 Better, Faster, Lighter Java 一書中,為大家講述了有關成功部署在我的客戶站點上的一些工具的信息,客戶有一些是財富 500 強中的公司。輕量級技術在企業領域內,正在蓬勃發展著。
謠言:輕量級開發策略構建的是“玩具”。
也許您更傾向于相信輕量級開發只對構建“玩具”應用程序有益。而您的目標是精確地滿足客戶的需求。讓我們首先明確一下:輕量級技術完全可以構建這種規模的應用程序。實際上,這種巨大的反差經常發生,因為只有簡單、簡潔、無狀態的設計才能使基礎設施更好地工作。
謠言:輕量級過程使您忽視規范。
在輕量級開發中,您需要認真地規劃并與客戶磋商需求。您必須構建嚴格的自動化單元測試,以優化重構。當放棄變更時,仍可以保持程序完整。而且,測試用例失敗或變更引發錯誤時,自動化構建會通知您。輕量級開發必須比其他技術更加注意規范,但這種規范源于不同方面。
我認為這種開發風格超越了單一的技術或過程。如果您想輕松一些,那么需要選擇使它易于工作的原則、過程和技術。
原則
該說的也說了,該做的也做了,您現在需要決定哪些需要重視,并據此制定決策。如果我覺得客戶被誤導或漠不關心,我通常會首先幫助他們建立核心原則。下面的列表是一個不錯的起點:
- 爭取簡單性。這種觀念應該滲入到您所有的工作中。您的過程應該剛好生成足夠完成工作的工件。開發人員應該盡量使用最簡單的方法解決問題。您的工具應該使您構建一個清晰、簡潔的解決方案。
- 修補漏洞。許多開發方法可能不鼓勵在過程中進行重構或變更,因為這些行為不直接用于產生客戶代碼。輕量級開發要求可以自由地修補太復雜或充斥 bug 的代碼。您需要為它做出預算。
- 自動化單元測試。您應該優先編寫測試用例。您可能還沒有在測試第一的開發中成功過,但測試會間接給您帶來重構代碼的便利。我以后會進一步講述:廣泛的單元測試改善您的客戶體驗,并提高代碼的設計水平,這是因為它強迫您解耦聯系過于緊密的代碼。
- 使用短開發周期并積極調動客戶參與其中。許多頂級的軟件工作室通過剔除不必要的工件來簡化開發周期。如果您已經順利得到客戶的參與,那么很多的功能規范會變得越來越沒必要??蛻魰軡M意這種交互,并感激您的短周期開發,因為這穩步提高了客戶的業務價值。
這些原則并不能完全包含您的技術抉擇和開發過程,但它有利于您描述開發體驗。如果經理也了解并遵循這些原則,開發人員就不至于做出無效技術選擇,或者開發一些不必要的工件。確立原則后,就該規劃一個有效過程了。
過程
緊湊、快速的開發過程通常從敏捷開發方法 當中得到靈感。然而,這些方法并不針對每個人。如果您有一個大型團隊,并且沒有實際訪問客戶或合適的代理人,那么傳統方法更適合您一些。但多數項目都有小團隊 —— 不超過 12 個人,他們可以充分訪問客戶,以靈活使用這種方法。通常,敏捷開發包括下列原則:
- 專注現場客戶和代碼,而不是其他設計技巧。您可以使用其他技巧,但只在它們對您確實有益的情況下。本過程不需要它。
- 簡化您需要的文檔。為了需要,寧可使用電子表格中的一行來描述,也不使用令人困惑的用例圖。
- 只做足以完成工作的設計工作。不要對設計或性能過分憂心忡忡,使自己陷入絕境。
- 為了開發,努力進行簡化并保證至少每天都集成您所構建的程序,必要時進行重構。
- 自動化測試。
即使您工作在傳統的機構,您也可以利用已裁減的開發過程。技巧是推廣原則 而不是方法。推廣極限編程管理器 —— 或其他冠以極限 的東西,這可能會很艱難。但推廣類似單元測試的原則通常更有意義。實際上,我的許多客戶使用這種技術同敏捷開發過程一起為保守的機構服務,但他們的老板絲毫不知道有什么發生了改變。
用修辭手法描述一下這種技術。原則 是重拳出擊的輕量級思想。過程是重量級的,實現起來將會很困難。
技術
我已經概述了大多數輕量級開發人員需要了解的設計原理,以及利用這些原理的重要開源技術。
依賴注入
最新一代容器稱為輕量級容器,它們使用一個共同設計原理:依賴注入。 對這個簡單思想來說,這是一個復雜的術語。依賴注入讓您將對象和它所依賴的東西交給第三方。然后第三方創建所有對象并將它們綁在一起。比方說,稱為 myDao
的數據訪問對象需要一個稱為 ds
的數據源。那么該容器會一同創建它們,并設置一個屬性:
清單 1. 創建一個第三方匯編程序
myDao = new Dao();
ds = new DataSource();
myDao.setDataSource(ds);
|
當然,不創建這種第三方匯編程序的話,您也可以使用框架來做其他附加的工作(如提供配置支持)。Spring 框架、Pico 和 HiveMind 就扮演了這個角色。其他像 JavaServer Faces(JSF) 框架也利用了依賴注入。
面向對象編程
使用面向對象編程(AOP),您可以編寫通用的功能性模塊(稱為方面) —— 例如,日志、事務、安全或持久性。AOP 使您可以將這些方面聯系到 POJO,然后指定一個時間點(如方法開始時或產生異常時)和另一個需要聯系的方面。例如,您可能想要創建一個外觀事務對象。您可以在調用方法時將 TransactionBegin
方面關聯到外觀方法。然后在產生異常時將 RollBack
方面關聯到外觀的異常。最后,在方法結束時將 Commit
方面關聯到外觀的方法。您在配置中完成這些工作,而不是通過編寫代碼。依靠這種能力,您可以創建一個簡單的 POJO 事務、安全或遠程訪問。
您現在已經得到了關于 POJO 的聲明性事務,這對企業應用程序非常有用。使用這些工具,您可以完全放棄 EJB,或者最小化它的作用。而這正是輕量級組件所要做的。
透明持久性
持久性也是建立在較簡單的編程模型之上。透明持久性框架通過配置而不是編寫代碼,來使您為應用程序添加持久性。因為大多數應用程序是面向對象的,并且訪問一個關系數據庫,所以一些專家斷言,我們最終將進入對象關系映射的時代。我目前發現的頂級持久性解決方案是 SolarMetric 的 Kodo JDO 和 Hibernate(參閱 參考資料)。在后面的文章中我將詳細比較這些解決方案。其他輕量級解決方案,例如 iBATIS 和 Active Record 設計模式,根本不會試圖進行對象關系映射。
結束語
在輕量級開發中,您基本上可以:
- 合并過程、技術和原理。
- 優先選擇較簡單的技術。
- 在一個穩固、輕量級的基礎上,進行構建。
- 盡量爭取最可能的透明性。
- 使用您可以利用的技術,如依賴注入和 AOP。
一定要明白,無論技術還是過程都不能完整定義輕量級開發。它是一個包羅萬象的概念。伴隨本系列的文章,您將看到對輕量級技術和原理的各種各樣的討論。我將首先關注開源框架,并著重講述輕量級容器。后面的文章,我會討論保守公司內的輕量級方法實現,甚至還有一些超越了 Java 技術的替代方案。我非常喜歡這個系列的文章,希望您也一樣。
參考資料
關于作者 Bruce Tate 居住在德克薩斯州的首府奧斯汀,他是一位父親,同時也是山地車手和皮艇手。他是 3 本最暢銷 Java 書籍的作者,其中包括榮獲 Jolt 大獎的 Better, Faster, Lighter Java 一書,最近又出版了 Spring: A Developer's Notebook 一書。他在 IBM 工作了 13 年,現在是 J2Life、LLC 的創始人兼顧問。他潛心研究基于 Java 和 Ruby 的輕量級開發策略和架構。 |
posted on 2005-10-27 09:14
小強 閱讀(264)
評論(0) 編輯 收藏 所屬分類:
J2EE