2010-05-19 76 views
2

我想知道,我有一個應用程序在asp.net mvc和nhibernate。我已經閱讀了關於asp.net mvc的Views,不應該知道Domain,它需要使用DTO對象。所以,我試圖做到這一點,我發現AutoMapper組件,並且我不知道爲某些域對象執行DTOS的正確方法。我有這樣的域名:ASP.Net MVC視圖應該如何處理我的DTO對象?

public class Entity 
{ 
    public virtual int Id { get; set; } 
    public virtual bool Active { get; set; } 
} 

public class Category : Entity 
{ 
    public virtual string Name { get; set; } 
    public virtual IList<Product> Products { get; set; } 

    public Category() { } 
} 

public class Product : Entity 
{ 
    public virtual string Name { get; set; } 
    public virtual string Details { get; set; } 
    public virtual decimal Prince { get; set; } 
    public virtual int Stock { get; set; } 
    public virtual Category Category { get; set; } 
    public virtual Supplier Supplier { get; set; } 

    public Product() { } 
} 

public class Supplier : Entity 
{ 
    public virtual string Name { get; set; } 
    public virtual IList<Product> Products { get; set; } 

    public Supplier() { } 
} 

我想要得到一些例子,我該如何做我的DTOs查看?我只需要在DTO中使用字符串?而我的控制器,它應該得到一個域對象或DTO,並將其轉換到一個域以保存在存儲庫中?

非常感謝!

乾杯

回答

1

沒有這方面的指導方針,這取決於你的個人喜好。我幾乎沒有什麼建議在實踐中證明有用:
1.使用平面DTO - 這意味着DTO的屬性必須儘可能原始。這可以節省您對空引用檢查的需求。 例如,如果你有一個域對象是這樣的:

public class Employee 
{ 
    prop string FirstName{get; set;} 
    prop string LastName{get; set;} 
    prop Employee Boss{get; set;} 
    ... 
} 

而且你需要輸出的電網員工的名單和他們的第1級的老闆顯示信息,我希望創建一個DTO

public class EmployeeDTO 
{ 
    prop string FirstName{get; set;} 
    prop string LastName{get; set;} 
    prop bool HaveABoss{get;set} 
    prop string BossFirstName{get; set;} 
    prop string BossLastName{get; set;} 
    ... 
} 

或類似的東西( - :
)2.不要將所有東西都轉換成sting--這會將DTO綁定到一個具體的視圖,因爲你會應用特殊的格式。在視圖中直接應用簡單的格式不是問題。
3.在您的p中使用DTO ost行爲並將其轉換爲域對象。通常,控制器的操作是防止錯誤數據的第一行,您不能期望能夠從用戶的輸入中構建有效的域對象。在大多數情況下,您必須執行一些後處理,如驗證,設置默認值等。之後,您可以創建您的DTO。

+0

嗨Branislav,感謝aswer! :) 我會這樣做(儘可能使用原始類型)... 您看到了關於驗證,並在.net框架中有一個dataAnnocations來驗證對象的屬性....如果我將使用DTO在(我的控制器的)後置操作中必須是有效的,代碼必須檢查它,所以我需要在DTO中使用dataAnnotations? 和你用什麼來創建你的DTOs? AutoMapper是一個不錯的選擇?或者用硬代碼來做? 再次感謝男人! 乾杯 PS:我很抱歉我的英語! – 2010-05-19 15:53:12

+0

我使用AutoMapper。它非常穩定且易於使用。對於價值,您可以使用數據偏移或一些第三方庫,如xVal - http://blog.stevensanderson.com/2009/01/10/xval-a-validation-framework-for-aspnet-mvc/ – 2010-05-19 16:04:38

相關問題