我想知道,我在asp.net mvc和nhibernate中有一个应用程序。我在asp.net mvc的Views中读到过这个,不应该知道Domain,它需要使用DTO对象。所以,我正在尝试这样做,我找到了AutoMapper组件,我不知道为某些域对象做正确的DTOS方法。我有这样的域类:
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() { }
}
我想了解一下如何查看我的DTO?我只需要在DTO中使用字符串吗?而我的控制器,它应该获得域对象或DTO并在域上转换它以保存在存储库中?
非常感谢!
干杯
答案 0 :(得分:1)
这个问题没有指导方针,取决于你的个人情况。我几乎没有在实践中证明有用的建议:
1.使用平面DTO - 这意味着DTO的属性必须尽可能原始。这节省了对空引用检查的需要。
例如,如果您有这样的域对象:
public class Employee
{
prop string FirstName{get; set;}
prop string LastName{get; set;}
prop Employee Boss{get; set;}
...
}
您需要在网格中输出员工列表并显示他们更喜欢创建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.在后期操作中使用DTO,然后将其转换为域对象。通常,控制器的操作是针对不正确数据的第一行,并且您无法期望能够从用户的输入中构建有效的域对象。在大多数情况下,您必须进行一些后处理,如验证,设置默认值等。之后,您可以创建自己的DTO。