наследование таблиц: конструктивные предложения? - PullRequest
1 голос
/ 06 января 2012

Есть предложения по чистым способам решения этой проблемы дизайна?

public class Task
{
    public User Assignee
    public User Assigner
}

public class User
{
    public string Name
}

Таким образом, у задачи есть два пользователя. Но теперь мы хотим добавить поддержку групп ...

public class Group
{
    public string Name
    public IEnumberable<User> Users
}

И мы хотим, чтобы задача была в состоянии обработать группу в качестве Цессионария

public class Task
{
    public User/Group Assignee
    public User Assigner
}

Когда я думаю о наследовании здесь. Группа "это тип" Пользователь не соответствует этому LSP, потому что Группа "не может быть заменена на" Пользователь

Я использую Entity Framework (сначала модель).

Ответы [ 2 ]

2 голосов
/ 06 января 2012

Почему бы не иметь

public class Task
{
    public Group Assignee
    public User Assigner
}

, где Group с одним пользователем заменяет один User?

1 голос
/ 06 января 2012

Group не User.Это неправильное моделирование.Если вам нужно наследование, определите новую абстрактную сущность верхнего уровня - например, Identity и выведите User и Group из этой сущности:

public class Task
{
    public Identity Assignee
    public User Assigner
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...