我们正在使用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)仅ID和名称 2)ID,名称和地址 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继承结构是否适合此需求?是否有其他建模方法?
我已经研究过关于此主题的其他帖子,但没有取得太大进展。我学到的一个东西是避免在类名中使用“DTO”后缀。我认为这似乎有点多余。
希望听听您的想法。
谢谢