Я использую POCO в качестве классов моделей в проекте ASP.Net MVC. Пока это работает хорошо, но в большинстве случаев эти 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, каковы преимущества использования одного подхода над другим? Я понимаю, что все дело в том, чтобы быть объектно-ориентированным, но я не уверен, есть ли в этом случае какая-либо польза от «вложения» этих объектов. Мне кажется, что будет больше работы по доступу к вложенным объектам и их переводу между моей моделью представления и моделью предметной области.
Редактировать. Я хотел бы отметить, что подмодели, которые я рассматриваю, не относятся к конкретному представлению. Скорее всего, они будут использоваться в нескольких местах приложения. Это приложение HR / льготы для сотрудников. Мне нужно, чтобы эти классы можно было использовать повторно, иначе я бы просто поместил их в ViewModel, которую уже использую.