【发布时间】:2014-02-28 21:47:55
【问题描述】:
我在 ASP.Net MVC 项目中使用 POCO 作为我的模型类。到目前为止,这运行良好,但在大多数情况下,这些 POCO 包含简单类型。我现在有一种情况,我正在考虑使用一些复杂的类型,但我不确定这种方法的好处。此外,由于我需要将单个数据库表拆分为多个 POCO,我的情况变得更加复杂。下面的例子将解释。我有一个包含大约 40 个字段的员工表。我不想总是传递这个带有所有属性的大对象,所以我创建了 3 个 POCO 类,它们代表数据的逻辑分组,如下所示:
public class EmployeeProfile
{
public int EmployeeID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Gender { get; set; }
etc ...
}
public class EmployeeContact
{
public Address Address { get; set; }
public PhoneNumber Phone { get; set; }
public string Email { get; set; }
}
public class EmploymentInfo
{
public decimal Salary { get; set; }
public string Occupation { get; set; }
etc ....
}
到目前为止一切都很好,但是我有时也确实需要将整个员工表作为一个对象,这就是我不确定的地方。我可以通过将其他类型放入其中来创建员工类,如下所示:
public class EmployeeDetail
{
public EmployeeProfile EmployeeProfile { get; set; }
public EmployeeContact EmployeeContact { get; set; }
public EmploymentInfo EmploymentInfo { get; set; }
}
或者我可以将三个 POCO 的所有属性单个属性(包括其中包含的复杂类型)复制到 EmployeeDetail 类中,使其平坦,具有如下简单属性:
public class EmployeeDetail
{
public int EmployeeID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Gender { get; set; }
etc ...
public Address Address { get; set; }
public PhoneNumber Phone { get; set; }
public string Email { get; set; }
public decimal Salary { get; set; }
public string Occupation { get; set; }
etc ....
}
除了包含复杂类型的版本需要更短的时间来创建 POCO 之外,使用一种方法比另一种方法有什么好处?我认为重点是面向对象,但我不确定在这种情况下“嵌套”这些对象是否有任何好处。在我看来,访问嵌套对象并在我的视图模型和域模型之间来回转换它们似乎会有更多的工作。
编辑:我想指出,我正在考虑的子模型并不特定于特定视图。它们很可能在整个应用程序中的多个地方使用。这是一个人力资源/员工福利应用程序。我需要这些类是可重用的,否则我会把它们放在我已经在使用的 ViewModel 中。
【问题讨论】:
标签: c# asp.net-mvc poco cqrs complextype