假設我有幾個控制器。每個控制器都可以在某個時候創建需要存儲在服務器上的新對象。例如,我可以有一個管理表單的RecipeCreationViewController。提交此表單時,會創建一個新的Recipe對象,並需要將其保存在服務器上。網絡存儲設計模式
什麼是最好的設計類的方法,以儘量減少複雜性和耦合,同時保持代碼儘可能乾淨和可讀?
辛格爾頓
通常我會創建一個單NetworkAdapter每個控制器可爲了節省對象的直接訪問。
例子:
[[[NetworkAdapter] sharedAdapter] saveObject:myRecipe];
但是我已經意識到有類調用自己的品牌耦合代碼單身,這是很難調試,因爲在單訪問隱藏在執行和不明顯界面。
直接引用
另一種方法是讓每個控制器保持到NetworkAdapter的引用,並有這由創建該控制器的類被傳遞英寸
例如:
[self.networkAdapter saveObject:myRecipe];
代表團
來考慮另一種方法是代表團。 NetworkAdapter可以實現一個「RemoteStorageDelegate」協議,每個控制器可以有一個remoteStorageDelegate,它可以調用像saveObject:on這樣的方法。優點是控制器不知道NetworkAdapter的細節,只是實現該協議的對象知道如何保存對象。
例如:
[self.remoteStorageDelegate saveObject:myRecipe];
直接在模型
另一種方法是有處理模型直接保存到網絡上。但我不確定這是否是一個好主意。
例如:
[myRecipe save];
你覺得這些是什麼?還有其他模式對此更有意義嗎?
依賴注入怎麼辦? –
@PeterWooster謝謝,我會對此進行更多的瞭解,我還沒有完全清楚它到底是什麼。如果你能提供一個概述你如何以及爲什麼要在這個特定情況下應用它,我將不勝感激。 – nebs
這是一個很好的問題。在你對單身人士的討論中,你的意思是「因爲對單身人士的訪問隱藏在實施中,而不是從界面中顯而易見」?當然它是隱藏的,因爲保存一個對象是一個實現細節,不需要通過界面來暴露。我認爲單身是一條路要走,我已經看到它成功地用於項目,包括核心數據和網絡訪問。 – Macondo2Seattle