2012-09-09 38 views
0

我已經分居的各個層(類庫項目)在我的解決方案資源管理器中是這樣的:在業務層DDD模式開始

我想用PetaPoco微ORM和someone suggested me添加PetaPoco在Repository層。正如所建議的,我將PetaPoco添加到Repository項目並從數據庫生成模型。現在,自動生成的POCO駐留在存儲庫中。

我不遵循的是當我想要實施DDD時,我想要模型中的所有POCO,即業務層。

我添加了一個WebForm用於在WebUI層登錄用戶。現在,當DDD被使用時,我是否需要模型中的接口?在哪裏寫驗證登錄方法?

回答

2

我強烈建議您(重新)閱讀Eric Evans關於域驅動設計的書。你也應該看看先生。這本書後埃文斯的視頻。 DDD不是關於存儲庫,數據庫,程序集或用戶登錄。

還有一種可能性,即DDD實際上並不是您要查找的。似乎您正在尋找一種分層方法,將ui置於某些實體/應用程序服務之上,並位於數據庫頂部的某些回購站之上。取決於你正在建設什麼,這可能實際上就是你所需要的。

如果您想使用PetaPoco,並且您的「orm」從db生成「models」,那麼在不同的項目中將它們分開是沒有多大意義的。模型由orm生成的事實(以及它們可能需要在將來重新生成的事實)使得它們與orm相互耦合,因此在單獨的程序集中移動它們並不會爲您帶來任何收益。

要回答你的ValidateLogin問題,我建議將所有auth相關的代碼移動到與其他層正交(垂直)的基礎結構層。應用程序用戶不一定需要成爲「實體」。您也可以在處理auth的模型層中擁有應用服務,但我通常認爲auth是基礎設施問題,而不是業務問題。

最後,我建議你熟悉這種架構的陷阱和優點,然後決定它是否適合你正在構建的東西。另一方面,你需要知道DDD的構建起來並不便宜,並且(正如Evand先生所說的),你可能不會在前幾次得到正確的結果。

+0

謝謝。如果我忽略ORM並使用LINQ會怎麼樣?我是否需要創建登錄界面? – RKh

+0

這並不重要。首先,您需要確定登錄過程是否屬於您的業務流程的一部分,僅僅是一個基礎設施問題。如果它是業務流程的一部分,那麼您將擁有一個用戶實體和一個能夠執行驗證/認證的應用服務。如果這是一個基礎設施問題,那麼你需要一個基礎設施組件。 –