項目中service類成為上帝類,所有工作都在一個類中完成已經成為了一個相當棘手的問題。這樣的高耦合場景使得代碼難以維護,難以閱讀,在需求變更時修改起來極為不方便,幾乎是每一次變更就需要重構。
學習設計模式可以嘗試在項目中降低耦合,抽象業務場景,從而使得項目更好的擴展和維護。
策略模式:定義一系列的算法(策略),這些策略所完成的工作相同,只是提供了不同的實現。
項目中有這樣一個場景:對於國際化的資源,每一個code對應一個json文件,json文件存儲了該對象的國際化資源(實際上是同一個code下每一種語言對應了一個文件,每個文件中的Key是相同的,value則是對應了不同語言的翻譯)。這樣的前提下,需求分別是[需要導出某一語言和中文對比的情況下,value值為空的所有內容],以及[和某一語言對比的情況下,value所對應的校對列為false的所有內容]。數據庫中以key為維度存儲了所有文件資源的內容,所以兩個場景實際上所作的工作是同一件,即從庫中取出符合條件的字段。
因此策略模式在這種情景下可以嘗試使用。將兩種場景抽象成兩種算法,根據客戶端的選擇來判斷算法的使用並返回計算結果。將純數據運算從service中剝離出來,方便擴展,並且大大縮減了service類的內容,降低耦合。