0

我正在學習總體發展策略,但在我的腦海裏有很多關於它們的問題。其中之一是創建應該不應該有依賴關係表示層的應用層。 例如,在MVC應用程序中可以說我們有應用程序服務,但此應用程序服務不檢查來自表示層的傳入數據模型的驗證。它只能在控制器中通過ASP.NET MVC驗證進行檢查,服務層也不包含任何授權內容。所有工作都在表示層完成。你認爲這是正確的架構嗎?我是否必須再次在服務層中包含所有驗證和授權?如果你說是,但如何?開發對錶示層沒有依賴關係的應用層?

如何在服務層中包含授權?我真的不知道如何控制服務層中的全部內容。在服務層複製驗證也可以嗎?

畢竟如果我確信表示層永遠不會改變,那麼是否真的值得進行設計?

回答

1

驗證應該位於域圖層中。在DDD應用程序中,域(業務)層應擁有驗證,因爲它最瞭解自己。服務層對域進行操作,並應處理由域層引發的錯誤,包括驗證錯誤。在這種情況下處理錯誤可能意味着將其包裝在服務層異常中,並返回錯誤代碼,記錄錯誤等。授權也應該是服務層的責任。這並不是說表示層(ASP.NET MVC)不應該執行驗證或授權驗證。表示層中的驗證通常比域和服務層中的驗證更輕量化,並且是爲了改善用戶體驗而完成的。畢竟,如果大多數驗證都可以在客戶端執行,那麼爲什麼不這樣做,並保存到服務層的旅程呢?同樣的邏輯適用於授權。

關於驗證邏輯的重複,沒有解決方案可以滿足所有情況,有時您必須接受一點重複才能降低總體複雜性並提高可維護性。在領域層做驗證的最簡單的方法是使用標準警衛並拋出ArgumentException實例。在ASP.NET MVC中,最簡單的驗證方法是使用數據註釋屬性。在一定程度上覆制驗證邏輯通常比實施全面驗證系統更容易。此外,可能有驗證只能由域層執行,這是保持它們分離的另一個參數。

服務層的授權可以通過多種方式完成,並取決於所使用的基礎技術。如果使用WCF,有許多guidelines用於授權。

相關問題