我们正在使用 AngularJS、C#、ASP.Net Web API 和 Fluent NHibernate 构建一个 Web 应用程序。我们决定使用 DTO 将数据传输到表示层(角度视图)。我对 DTO 的一般结构和命名有一些疑问。这是一个示例来说明我的情况。假设我有一个名为 Customer 的域实体,它看起来像:
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) 身份证、姓名、地址和帐户
我创建了一组 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 继承结构似乎很适合要求吗?还有其他方法可以对此建模吗?
我已经浏览了有关此主题的其他帖子,但没有取得太大进展。我做的一件事是避免在类名中使用后缀“DTO”。我觉得感觉有点多余。
很想听听你的想法
谢谢