2012-04-11 62 views
1

我使用xcode和核心數據創建數據模型。這是一個對象圖,而不是實體關係模型,所以我有繼承和多對多關係。我該如何建模某些實例無法修改?

這是我的問題: 我有一個名爲Category的類或實體。某些類別是由應用創建的,不能由用戶刪除或修改。用戶可以創建自己的類別。

經過思考,我找到了4種方法來模擬這個。看到圖片:

enter image description here

我想最實際的解決方案只是把一個標誌,isSystemCategory,但我不知道什麼是從一個造型點的最佳解決方案。我猜第一個。一個稱爲Category的抽象類和2個後代,可編輯和可刪除的UserCategory,以及不可修改的SystemCategory,用戶不能刪除它或修改。請注意,後代不會添加任何屬性,關係或任何更改,所以,這就是我的問題的原因。這對建模者來說是否正確?

我想知道你的想法。謝謝。

回答

1

根據描述我可能會去第一個。

注意,後人不添加任何屬性,關係或任何 變化

但行爲是不同的。還有一個邏輯上的差異。 User和UserCategory之間有一種暗示的「關係」,允許用戶創建/更新/刪除UC。你可能不需要明確地保留它,但它仍然存在(並且你可能會捕獲它,例如,如果你想記錄誰創建/修改/刪除了類別)。

創建單獨的子類型可以防止一些令人討厭的條件邏輯,否則如果您使用的話會突然出現。一隻旗。想想刪除:有一個國旗,你會有一個if (category.isUserCategory) then <delete> else <...etc...>。此外,對於每個對於用戶類別和系統類別而言表現不同的操作,該邏輯將被複​​制。使用子類型刪除:UserCategory.delete()只是做它,SystemCategory.delete()只是沒有(甚至可能沒有SystemCategory上的公共刪除)。沒有條件。

最後一個想法:這裏的問題實際上是關於授權。如果處理類別是它唯一出現的地方,那麼你的選擇(1)可能是一個實用的解決方案(「最簡單的事情可能有效」)。但是,如果您反覆需要控制訪問權限,那麼您可能應該使用更一般的授權機制。

hth。

+0

很棒的回覆。 「創建單獨的子類型將防止一些討厭的條件邏輯」,這正是我所想的。但是,我想知道是否使用核心數據(第一種情況下的類別是抽象類/實體),我可以發送如下請求:「屬於此類別的所有食譜(即,用戶或系統類別)」和相反,「屬於用戶創建的類別的食譜」。我認爲是可能的,但不確定。非常感謝。 – Ricardo 2012-04-11 12:29:11

+1

不客氣。我不熟悉Core Data。然而,如果你不能要求(a)所有系統類別(系統類別的實例),(b)所有用戶類別(用戶類別的實例)和(c)所有類別(實例類別)。類別可能是抽象的 - 但在運行時仍然有它的實例(每個{User | System}類別實例同時是一個Category實例)。心連心。 – sfinnie 2012-04-11 20:39:22

相關問題