我在軟件開發方面非常新穎。就我個人而言,我認爲分層體系結構是減少面向對象方法在軟件開發過程中產生的複雜性的一種好方法,更不用說保持代碼的組織性。現在,我遇到了DDD(域驅動設計)引入的一些問題。當然,初學者水平。
這裏是 -
假設我想構建一個應用程序來保存數據庫中的「人員」相關數據,並在wpf數據網格中顯示個人詳細信息(DDD絕對不適用於這種規模的應用程序,而只是爲了保持對於像我這樣的業餘愛好者來說很簡單)。所以,我設計了一個域類「人」,有點像 -DDD:應該如何組織圖層?
public class Person
{
public Person(dataType paramA, dataType paramB)
{
_fieldA = paramA;
_fieldB = paramB;
}
private dataType _fieldA;
public dataType PropertyA
{
//encapsulates _fieldA
}
private dataType _fieldB;
public dataType PropertyB
{
//encapsulates _fieldB
}
public dataType PropertyX
{
//some code based on private fields
}
public dataType PropertyY
{
//some code based on private fields
}
private dataType MethodPQR(dataType param)
{
//some code
}
public dataType MethodUVW(dataType paramOne, dataType paramTwo)
{
//some code
}
}
現在,我的DDD的理解說的架構(它的最簡單的版本)應該是如下(請糾正我,如果我錯誤) -
注:
我想將DataGrid綁定到一些的ObservableCollection,只是即時反映任何樣的變化。
這是一個WPF應用程序,但不一定是在MVVM模式,我故意要這樣使用後面的代碼(我也不知道,如果自己後面的代碼代表了應用層)
我問題是 -
什麼樣的代碼應該屬於應用層?
我的猜測是,我絕對不應該將我的域對象(Person)的ObservableColletion綁定爲datagrid的itmsSource。然後我應該從域對象中提取什麼類型的對象,以及如何?
爲了保持表示層對象和域層對象之間的解耦,可能會出現像
「never instantiate domain objects directly in presentation layer」
這樣的約定。那麼什麼是非直接的方法?如果Code-Behind與應用層對話,那麼應用層是否應該與Repository進行通信?但是,如果需要某種類型的域訪問,而不是而不是數據訪問相關(可能不在此應用中,但可能會發生,對嗎?)誰是應用層應該與之通信的域層中的X人?
我知道我所有的問題和問題都非常非常業餘水平。但他們確實是問題和問題。所以,如果有人有時間,任何迴應將不勝感激。
編輯:我不確定數據存儲庫是否應該有一個域模型的參考。
@Sisyphus:現在+1,清潔和詳細的描述,以及你的時間來開導我。但是,更多的問題會來到你的方式:) – atiyar 2011-05-06 18:09:11
@Sisyphus:再次感謝。你的建議很整潔,應用程序服務和域服務之間的區別非常有幫助。還有一個問題。應用層是否可以直接訪問存儲庫,或者它總是通過域層?我的意思是,幾乎總是,每個請求**履行**執行某種域限制(驗證可能)檢查任何請求**提交**,對不對?那麼應用層不應該向域層提交每個請求,只有域層可以訪問存儲庫? – atiyar 2011-05-07 20:07:45
因爲意見是有限的,我添加到我的答案。見編輯部分。 – Sisyphus 2011-05-08 10:51:27