2011-03-01 66 views
4

我正在做一個AppDelegate的對象,並在整個程序中使用它,並且我已經聲明瞭所有的setter和getters,並且還插入,選擇,刪除,更新其中的數據庫查詢。使用AppDelegate進行數據處理和處理是不是很好的做法?

我想問一下,這是否是一個好習慣,如果是,那麼如何,如果沒有,那麼爲什麼這不是一個好的做法?

我希望我的問題很清楚,如果您有任何問題,請提出相關問題。

回答

8

把你的AppDelegate變成一個包含一百萬個方法和屬性(儘管它可能是誘人的)的「大泥潭」並不是一個好策略。

一個更好,更面向對象的方法將功能劃分爲精心設計的對象 - 例如,您可能有一個DatabaseManager類來處理所有數據庫交互。然後,您可能需要一些應用程序,這些應用程序需要DatabaseManager嚮應用程序委託實例請求對DatabaseManager的引用。

或者,您可以將對DatabaseManager的引用傳遞給需要它的應用程序的各個部分。然而,這最後一種方法會導致更多的「接口污染」,在這種情況下,您必須在很多地方修改接口以傳入DatabaseManager。

另一種選擇是有效地讓你的DatabaseManager本身成爲一個「單例」 - 通過類的類方法訪問它的一個實例。以這種方式工作的單身人士往往會皺起眉頭,而且通常是出於很好的理由(使測試更加困難,諸如此類)。我傾向於避免讓對象將「單身」特性烘焙到對象中 - 如果我需要這種事情,我更喜歡擁有一個已知的訪問點(如果你喜歡的話,是一種「工廠」),你在哪裏可以去獲取一個共享實例。

2

這一切都是關於複雜性和你的感受。你必須喜歡你的解決方案;-)

我明顯以另一種方式做到這一點 - 我有singleton,它處理我所有常見的數據庫事情。我試圖讓應用程序委託儘可能簡單。代碼共享更好,等等。

+1

而其他人不得不稍後喜歡他的解決方案,如果他們正在使用相同的代碼:) – occulus 2011-03-01 14:17:54

4

我認爲最好的方法是創建一個全局的單例類,而不是在Appdelegate中處理。

聲明你所有的設置者和獲取者,並在你的項目中使用單例對象句柄。看到這個鏈接如何創建singleton class

對於數據庫,創建一個DataAccessLayerClass。每當你想執行任何查詢訪問這個類。這個類方法應該有輸入作爲你的數據,並將創建查詢並執行該查詢並返回數據。

+1

您提到的單例模式 - 其中一個對象具有單身特性「烘烤」 - 是相當嚴格的。如果您以後想要兩個數據庫管理器對象(因爲您連接到兩個數據庫)會怎麼樣?如果您編寫的測試需要多個實例存在才能用於測試目的?提供某種類型的工廠來提供配置的共享單例實例更爲靈活。只是我的意見。 – occulus 2011-03-01 14:11:44

+0

還有一個問題:優秀的設計通常需要將配置信息傳入數據庫管理器(或其他),而不是配置自身(再次出於測試等原因)。但是,如果所有的代碼都要求單例對象本身爲它的共享實例,那麼這會變得棘手,因爲所有對getInstance的調用都必須在配置信息中傳遞以防需要它。 – occulus 2011-03-01 14:16:55

相關問題