1

DDD/MVC describes keeping the damain entities and the View layers seperated, in order to keep the Views persistance ignorant and vice versa. DTO's are a way of doing this. I have looked at AutoMapper as a way to facilitate his. However, since I have recently started with EF and pure POCO classes, is seems to me that a DTO, that directly maps a persistan ignorant POCO is really just a duplicate layer that servs no purpose at all other than to be able to say you are using DTO's. What would be wrong with just simply skipping the DTO layer if your POCO is pure and persistance ignorant?

Thanks

JAMES

4

2 回答 2

1

您必须记住的一件事是关于模型活页夹。它将绑定您的模型具有同名属性的任何已发布字段。

为了澄清这个问题,假设您正在使用这样的用户模型:

public class User
{
    public int UserId { get; set; }
    public string login {get; set; }
    ...
    public bool admin { get; set; }
}

如果您在注册页面上使用此模型,即使您尚未为 admin 创建字段并将脚手架设置为 false,恶意用户也可以创建名为 admin 的表单字段并将其设置为 true(如复选框)你的页面。发布此表单将导致您收到的模型将此属性设置为 true,从而使用户成为管理员。

这就是为什么您必须使用防伪令牌和视图模型来减轻工作量的原因。

于 2013-02-01T23:43:22.437 回答
0

拥有 DTO(或 ViewModels)的原因是域对象与视图不同。

对于每个视图,您应该有一个适合它的单独视图模型。我只能包含数据和元数据,例如验证属性。

域对象不应该公开数据,而是代表业务规则的行为。

如果您的视图模型只是复制域模型。如果您的域模型没有任何方法,而只有公共属性。如果你还没有定义无处不在的语言、聚合、不变量……那么你只是不是在做 DDD,而是在做 CRUD 应用程序。在那种情况下,确实,DTO 可能毫无意义。

于 2013-02-04T09:07:20.860 回答