Реализация интерфейсов

AOIS

Ефрейтор
Сообщения
7
Реакции
0
Привет всем.. интересный вопрос на который я толком не нашел нигде ответ, коллеги по разному все говорят))) предлагаю обсудить.. все что написано - написано для примера))
1. Имеем интерфейс UserRepository
который объявляет метод findByEmail(string): User
2. Имеем интерфейс AllModelRepository
в котором объявлен метод all(): Collection
3. Имеем интерфейс FindModelRepository
с методом findById(int $id);

есть сущности где нужен поиск по id, есть сущности где не нужен.. поэтому такая вот схема..

4. Имеем реализацию OrmUserRepository где должны быть реализованы методы
findByEmail, all, findById

5. Имеем резолвер RepositoryResolver в котором есть метод resolve который в качестве аргумента принимает имя класса и возвращает репозиторий этой сущности.. (ну так надо))))

Как правильно имплементировать методы в наш класс?
Вариант 1:
интерфейс UserRepository расширяем AllModelRepository, FindModelRepository
Класс OrmUserRepository имплементируем от UserRepository

Вариант 2:
Класс OrmUserRepository имплементируем от UserRepository, AllModelRepository, FindModelRepository

Какой правильный?) Плюс иногда надо проверять от чего имплементирован класс...

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