簡介
事實證明,在現有的應用程式中添加功能是軟體開發中最具挑戰性的任務之一。除了不改變現有的代碼外,還要確保新增的代碼滿足所有易用性和效能需求。在本文中,學習如何在 Web 項目的後期階段引入新功能,以及如何無縫地把修改整合到現有項目中。
本文介紹的方法在軟體開發生命週期的以下階段中尤其有意義:
開發階段。客戶要求Team Dev在產品中整合新功能,從而提高易用性(由於項目採用迭代式的敏捷開發方法,這種情況越來越常見了。)這要求在短時間內對新功能進行快速分析和整合,而且不能破壞應用程式的健壯性和標準。
維護階段。常常需要添加和刪除功能。Team Dev還可能需要為特定的客戶接入或取消某些功能。還常常需要進行其他的定製工作。
分析了這個問題之後,團隊應該開發一個靈活的體繫結構,從而支援無縫地添加和刪除功能,而不需要修改產品或應用程式核心功能的代碼。在理想情況下,應該根本不修改屬於核心功能的代碼,因為在這部分代碼的測試和穩定性處理方面已經投入了大量時間。本文中的用例示範如何開發這樣的應用程式,並指出一些挑戰。
用例
一個部落格應用程式已經開發完並投入使用了。但是,客戶又提出了一項新要求:在部落格系統中增加郵件功能。客戶已經有一個郵件伺服器,希望以某種方式把這兩個應用程式整合起來。客戶希望:
每當使用者單擊有效 URL 時,都給他們提供一個視窗。
這個視窗包含郵件組件提供的所有選項。
郵件視窗可以向郵件伺服器發送郵件。
挑戰
Team Dev不願意為了添加郵件功能而修改部落格系統的核心功能,因為這樣做的風險太大了。如果Team Dev在開發核心功能時使用了第三方軟體,而這些軟體不允許他們修改原始碼,那麼情況就更加麻煩了。另外,管理員也反對修改現有的展示層和業務層。
解決方案
Team Dev可以選用兩種方法。圖 1 展示了核心功能和新功能並不緊密整合的方法;體繫結構使新功能與核心功能鬆散地耦合:
圖 1. 核心功能和新功能並不緊密整合
圖 2 展示了核心功能和新功能緊密整合的方法;在這個體繫結構中,新功能成為核心功能的固有部分。
圖 2. 核心功能和新功能緊密整合