2010-04-26 87 views
0

我在asp.net mvc begginer,我有一些疑惑。在保存方法中獲取實體,什麼是正確的形式?

P.S:我使用DDD學習

我有一個控制器的動作,它會保存一個儲存庫(用於數據庫)的實體(從我的模型)。 我的疑惑是,如何從View中獲取信息並通過存儲庫將其保存在Controller中? 它是正確的,讓我的模型的實體控制器的保存方法,像這樣:

公衆的ActionResult保存(產品產品) {// 驗證對象
//保存在倉庫
返回查看數據(「成功」); }

或需要我得到一個DTO(類似我的實體的結構),並創建通過轉移的財產屬性設置爲一個實體對象? 我不喜歡FormCollection,我想知道,什麼建議建築?

非常感謝球員

乾杯

回答

1

我想要遵循藍皮書中描述的DDD實踐,您應該將您的視圖綁定到DTO的可以轉發到從數據庫中創建或檢索域對象的「應用程序」層。這個應用程序層可以是一個帶有方法的簡單外觀,也可以利用命令模式。

對於現場演示,您可以看到我的項目 - DDDSample.NET

0

只要在窗體中有匹配產品領域的哪些字段,就應該自動根據數值爲您填充。如何保存實體取決於數據模型,無論您是創建新記錄還是編輯現有記錄等。

1

通常,在ASP.NET MVC中,控制器操作將接收由DefaultModelBinder返回的強類型對象編輯實體類型時。使用這種模式,您可以將「產品」單獨或作爲DTO的一部分傳遞給GET視圖,然後您的「保存」方法將在其參數列表中收到「產品」對象。

只要您使用編輯器模板或具有匹配名稱的字段(即Html.TextBox("Name")對應於Product.Name),那麼DefaultModelBinder應該能夠正確填充傳遞給操作方法的類型實體對象。除了在某些邊緣情況下,您不應該混淆FormCollection。

[HttpGet] 
public ActionResult Create() { 
    return View("Create", new Product()); 
} 

[HttpPost] 
public ActionResult Create(Product product) { //or Save(Product) 
    ... 
} 
1

這種問題可以通過添加所謂的view model來解決。

基本上 - 視圖模型是爲特定視圖提供數據的DTO。以類似的方式 - 視圖模型用於通過模型綁定從視圖中獲取數據。然後 - 控制器只是將必要的數據轉發到域模型。

相關問題