我们正在使用AngularJS,C#,ASP.Net Web API和Fluent NHibernate构建一个Web应用程序。 我们决定使用DTO将数据传输到表示层(角度视图)。 我对DTO的一般结构和命名有一些疑问。 下面是一个例子来说明我的情况。 可以说,我有一个域的实体,称为客户看起来像:现在DTO命名约定,建模和继承
public class Customer
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual Address Address { get; set; }
public virtual ICollection<Account> Accounts { get; set; }
}
,在我的意见/表示层我需要检索,如客户的不同口味:
1)只是标识和名称 2)身份证,姓名和地址 3)ID,姓名,地址和帐户
我创建了一个集的DTO的做到这一点:
public class CustomerEntry
{
public int Id { get; set; }
public string Name { get; set; }
}
public class CustomerWithAddress : CustomerEntry
{
public AddressDetails Address { get; set; }
}
public class CustomerWithAddressAndAccounts : CustomerWithAddress
{
public ICollection<AccountDetails> Accounts { get; set; }
}
AddressDetails和AccountDetails是具有其相应域实体的所有属性的DTO。
这适用于查询和数据检索;问题是我用什么来插入和更新。在创建新客户记录期间,名称和地址是强制性的,账户是可选的。换句话说,我需要一个包含所有客户属性的对象。因此,混乱:
1)我用什么来插入和更新? CustomerWithAddressAndAccounts DTO包含所有内容,但其名称似乎有点难以用于插入/更新。
2)我是否创建另一个DTO ..如果我这样做,是不是会重复,因为新的DTO会完全像CustomerWithAddressAndAccounts?
3)最后但并非最不重要的是,上面描述的DTO继承strcuture看起来是否符合要求?有没有其他方法可以对此进行建模?
我已经通过了这个话题的其他文章,但无法取得进展。 我做的一件事是避免在类名中使用后缀“DTO”。 我觉得这有点多余。
很想听听您的想法
感谢
感谢您的回复。使用多个DTO类的动机之一是在定义DTO的用途时更具表现力。另外,如果您只需要Id和Name,您是否应该通过电汇发送完整的CustomerEntryDTO(您所描述的)? – Sennin
@Sennin我根据你的评论编辑了我的答案,但我认为我的答案对你而言仍然不完整。可能是我稍后将对其进行编辑,以在您的上述评论中添加更多内容。 – VS1
@Sennin请参阅我的编辑2. – VS1