2011-12-16 100 views
6

我有以下設置:MVC> Services> Repositories。現在我想讓用戶能夠將註釋添加到文檔。只有與文檔相關的用戶(無論是作爲業主或審閱)可以添加註釋所以在我NoteService我做以下,以確保用戶具有對所選擇的文件權限:將方法添加到POCO類

​​

我的問題是,我應該在哪裏定義userHasAccess方法?在NoteService中它沒有任何意義,因爲它正在檢查文檔。我可以在DocumentService中定義它,但是隨後NoteService將需要訪問這個,這似乎正在引入更多的耦合。

對我來說,更有意義的是在文檔POCO本身上定義它,然後調用document.userHasAccess(...)。這是好的做法,還是應該將POCO域限制爲簡單的屬性?我擔心這確實是驗證的一部分,通過將該方法放入POCO中,我將分離服務和POCO之間的驗證。

我想確保的是我的應用程序易於維護和測試。任何建議,我應該如何解決這個問題將不勝感激!

+0

在POCO 檢查這個屬性以及不userHasAccess做什麼樣的檢查?代碼訪問安全性可能適用於您。 – jgauffin 2011-12-16 14:58:52

+0

它只是檢查用戶是在Document.Owners還是Document.Reviewers中 - 這些是Document和Person之間的多對多關係。 – James 2011-12-16 15:04:37

回答

7

我應該在哪裏定義userHasAccess方法?

這是有道理的符合設計的其餘部分保持一致,雖然我不知道完整的設計,我至少可以說,在POCO本身)稱爲UserHasAccess(方法是有道理的。

域POCO應該限於簡單的屬性嗎?

不,域POCO應該包含與對象相關的邏輯(特別是驗證邏輯)。否則,它最終會成爲一個object with no behaviour - 你應該避免的東西。

但是,不要混淆域(業務)對象和視圖對象,它通常只包含很少的邏輯。

您擔心您將 服務和POCO之間的驗證分開。

我會在POCO中進行驗證,並在服務中使用跨域邏輯。

0

任何域實體也可以包含驗證方法。

+1

這是不錯的做法嗎?我不想開始將這些看似簡單的方法添加到我的POCO類中,以後才發現難以維護/測試。這將是很好的保留在一個部分的所有驗證 - 上面的例子我可以檢查用戶是否在document.Owners,然後如果在document.Reviewers中,但我需要重複這個邏輯一次又一次,所以它需要成爲自己的方法。 – James 2011-12-16 14:21:46

0
  1. 如果您遵循域模型模式,那麼您可以添加具有行爲的屬性。 檢查這個由Martin fowler
  2. 如果你正在跟蹤表模塊模式則在BLL類添加行爲和Martin fowler