Просмотр поста

.
L!MP

Тема заглохла вроде бы, меж тем у меня есть вопрос.
Возможно я вообще ерундой страдаю и это совсем не принципиально, однако.

Есть у нас класс коллектор неких сущностей.

interface EntityCollectorInterface {}
class EntityCollector implements EntityCollectorInterface {}


Собственно класс представляет коллекцию обьектов и набор методов для различных манипуляций.
Так же у нас есть класс менеджер сущностей, который так же реализует функции коллекции обьектов + какая-то дополнительная логика.
Логично как бы взять, и унаследовать этот менеджер от коллектора, т.е:
interface EntityManagerInterface extends EntityCollectorInterface {}
class EntityManager extends EntityCollector implements EntityManagerInterface {}


И вот тут мне не нравится то, что наш EntityManager, как бы дважды реализует EntityCollectorInterface, первый раз - через наследование EntityCollector, а второй - через, имплементацию EntityManagerInterface.

РНР то на это всё равно. Никаких ошибок. Но мне чего то это всё глаз мылит.

Уже думал всю реализацию EntityCollector переместить в трэйт, как то так:
interface EntityCollectorInterface {}
class EntityCollector implements EntityCollectorInterface {
    use EntityCollectorTrait;
}
interface EntityManagerInterface extends EntityCollectorInterface {}
class EntityManager implements EntityManagerInterface {
    use EntityCollectorTrait;
}

Но тут теперь глупо выглядит EntityCollector, т.к он теперь кроме подключения трейта не содержит никакой логики и, по сути, только для этого и нужен.
Короче как вариант кривее/ровнее? Второй вариант можно "выровнять" в РНР7 заменив "не нужный" EntityCollector на анонимный класс, но РНР7 пока нельзя.