DDD/MVC描述保持damain實體和View層分離,以保持Views持久性無知,反之亦然。 DTO是這樣做的一種方式。我已經看過AutoMapper作爲一種方便他的方法。但是,由於我最近開始使用EF和純POCO類,在我看來,直接映射persist無知POCO的DTO實際上只是一個複製層,除了可以說你是使用DTO's。如果你的POCO是純粹的,堅持無知的話,簡單地跳過DTO層會出什麼問題?DDD/MVC純POCO類可以直接呈現給View?
感謝
JAMES你必須記住
DDD/MVC描述保持damain實體和View層分離,以保持Views持久性無知,反之亦然。 DTO是這樣做的一種方式。我已經看過AutoMapper作爲一種方便他的方法。但是,由於我最近開始使用EF和純POCO類,在我看來,直接映射persist無知POCO的DTO實際上只是一個複製層,除了可以說你是使用DTO's。如果你的POCO是純粹的,堅持無知的話,簡單地跳過DTO層會出什麼問題?DDD/MVC純POCO類可以直接呈現給View?
感謝
JAMES你必須記住
一件事是關於模型的粘合劑。它將綁定您的模型具有相同名稱屬性的任何發佈字段。
要弄清這個問題,想像你正在使用的用戶模型是這樣的:
public class User
{
public int UserId { get; set; }
public string login {get; set; }
...
public bool admin { get; set; }
}
如果使用註冊頁面上這種模式,即使您尚未創建管理員字段和設置好的腳手架爲假,而惡意用戶可以創建一個名爲admin的表單域,並將其設置爲true(如複選框)在您的頁面上。發佈此表單會導致您收到的模型將此屬性設置爲true,從而使用戶成爲管理員。
這就是爲什麼你必須使用防僞造令牌和查看模型,以避免這種情況。
有DTO(或ViewModels)的原因是域對象不同於視圖。
對於每個視圖,您應該有一個適合它的單獨ViewModel。我只能包含數據和元數據,比如驗證屬性。
域對象不應該公開數據,而應該顯示業務規則的行爲。
如果您的查看模型只是複製域模型。如果您的域模型沒有任何方法,但只有公共屬性。如果你還沒有定義無處不在的語言,聚合,不變量......那麼你只是沒有做DDD,但CRUD應用程序。在這種情況下,的確,DTO可能毫無意義。