IRepository с унаследованными классами - PullRequest
1 голос
/ 03 января 2011

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

class Employee

IEmployeeRepository
{
 Add(Employee employee);
}

Это отлично работает, пока ничего плохого ... но теперь, допустим, я продолжаю ..

class Manager : Employee

Хорошо, теперь давайте предположим, что мне никогда не нужно вводить менеджера, отличного от сотрудника? Какой лучший подход здесь? Был бы такой сценарий, как ..

IEmployeeRepository
{
 Add<T>(T employee) where T : Employee
}

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

Ответы [ 3 ]

1 голос
/ 03 января 2011

Если бы все они были сотрудниками, я бы, вероятно, создал бы интерфейс и ограничил его этим. Например:

IEmployeeRepository
{
 Add<T>(T employee) where T : IEmployee
}
0 голосов
/ 03 января 2011

давайте предположим, что мне никогда не нужно вводить менеджера, отличного от сотрудника

Так что у вас нет абстракции.У вас есть только Employee, и вам нужен репозиторий для этого.

нужно ли абстрагировать другое хранилище для каждого типа?

Да, если у вас естьабстракция нескольких подклассов.Дело в том, что обычно вам не нужен репозиторий для абстрактных классов, только для подклассов.

0 голосов
/ 03 января 2011

Если что-то обрабатывается по-другому, вам следует создать еще один репозиторий для нового типа.

Если у них никогда не было разной логики (и они действительно не должны учитывать, что Менеджер по-прежнему является Сотрудником в вашем случае), то вы можете использовать то, что у вас уже есть. Вам даже не нужно менять код (если Manager наследует от класса Employee):

public interface IEmployeeRepository
{
    Add(Employee employee);
}

Должно работать нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...