#c# #design-patterns
Вопрос:
У меня есть класс person :
public class Person :
{
public Guid Id { get; set; }
public Guid? PersonRealId { get; set; }
public Guid? PersonLegalId { get; set; }
public virtual PersonReal PersonReal { get; set; }
public virtual PersonLegal PersonLegal { get; set; }
}
реальный :
public class PersonReal
{
public Guid Id { get; set; }
public string Title { get; set; }
public Guid Sex { get; set; }
public string FirstName { get; set; }
}
и юридический имеет :
public class PersonLegal
{
public Guid Id { get; set; }
public string Title { get; set; }
public string Name { get; set; }
public Guid? TopManager { get; set; }
public string NationalCode { get; set; }
}
лицо всегда относится к реальному или юридическому типу, а не к обоим одновременно.
какой наилучший шаблон для реализации person с использованием шаблона проектирования?
Комментарии:
1. Наследование не выполняет эту работу?
2. Я так не думаю. у них разные свойства, но они люди
3. Зависит от того, что вы хотите с ними сделать. Например: будут ли они использоваться в общем
List<Person>
, например? Будет ли достаточно (в большинстве случаев), чтобы у них были конкретныеToString
реализации? Также: почемуTopManager
aGuid?
, а не aRealPerson
? Если вам нужно обрабатывать их по-разному в разных алгоритмах, имеет ли смысл использовать шаблон double-dispatch-visitor?4. Являются ли эти объекты в контексте инфраструктуры базы данных / ORM?
5. ^^ «двойная отправка-посетитель» => взгляните на dotnetfiddle.net/ALWuBx
Ответ №1:
Определите перечисление для указания типа пользователей
public enum PersonTypes{
Real=0,
Legal=1,
}
public class Person
{
public string Id { get; set; }
public string NationalCode { get; set; }
public string Title { get; set; }
public bool Sex { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public PersonTypes Type { get; set; }
public string ManagerId { get; set; }
[ForeignKey("ManagerId")]
public virtual Person Manager{ get; set; }
}
Комментарии:
1. они обладают совершенно разными свойствами
2. вы могли бы использовать наследование для реализации этого