0

我正在設計一個系統。 ,它有一個非常靈活的結​​構來代表組織,這是非常重要的。設計系統組織結構表示

基本的要求很簡單:

  1. 有集裝箱的層次結構(組織單位)
  2. 容器將包含其它實體(包括其它容器),實體,如:
    • 組可以包含用戶
    • 日曆
    • 等...
  3. 還有一個要求,以便根據結構的許可和註冊過程。
  4. Users \ Groups可以向其他容器註冊不同的角色和權限,並且將授予他們對所有其他實體具有相同角色的權限,還可以定義組和日曆的管理員。

初始想法:

  1. 使用 「複合」 設計模式來表示的實體:
    • [[接口]] IEntity - > INT ID,字符串名稱...
  2. 每個實體將實現相同的接口
  3. 容器實體將持有將引用這些實體的子項列表。
  4. 每個實體都將持有一個「權限樹」,用於在葉子上保存用戶列表,該樹將表示用戶向實體註冊爲管理者的角色和方式。即,如果用戶是註冊爲通過一組一個所有者的樹將顯示:擁有者 - >組別1 - >用戶1.

沉思:

  1. 如果每個實體具有一個刪除\自己添加方法?在接口級定義,或者應該有一個不同的類某種「EntitiesManager」來處理添加編輯和刪除實體的所有任務。
  2. 我應該如何建模我的數據庫來保存許可樹信息?

我很樂意聽到關於該主題的任何想法,更正,經驗教訓或建議。

在此先感謝...

回答

1

爲了您的沉思,我建議如下:

  1. 假設你現在不知道的所有實體,他們可能有 非常不同的結構,你應該更好的封裝 創建的邏輯/刪除的實體類。使用默認實現更常見的超類 將是一個好主意。
  2. 關於權限樹。您是否已經完成了 這個實體模型?對於你的情況最好的辦法是自上而下的,這是相當多 直接的實體模型映射到數據庫模型,當你 已經擁有了它:)
+0

謝謝..只是爲了看看我的理解......你建議使用特定的實體類使用CRUD操作。所以如果我想添加另一個容器,它會看起來像這樣:MyContainer.Add(),並將他添加到數據庫。我以爲使用某種FACADE的域管理器類可以幫助我創建實體,例如DomainManager.AddEntity(theEntity,ParentEntity)。 – Mortalus 2012-08-14 19:37:52

+0

是的。如果CRUD邏輯對於所有實體都是非常簡單的,那麼這種方法是最好的。但讓我們考慮一下當你有50個具有非常特定的CRUD邏輯的不同實體時。我不是說可以在數據庫級別上執行級聯刪除。我的意思是像'請爲這個新用戶創建默認權限集'。你的DomainManager類將被炸燬。另一方面,在實體的典型操作中,您將始終可以輕鬆訪問CRUD邏輯,而無需獲取DomainManager實例。 – 2012-08-15 05:12:04