Разбор ООП с Delphinum

26.91K
.
reaper, ну я не готов перебирать все возможные варианты чтоб организовать один стрим на пару часов ) Обновлю железо, повторим попытку
.
Кадило крутится, лавэха мутится
# ramzes (06.11.2016 / 11:23)
что мешало взять компьютер, а не ныне-модное поделие "ноутбук" выдающее себя за компьютер?
Глупости. Ноут буки вполне неплохо способны справляться с задачами, которые на них кидают. Это просто линукс так скажем кривой...
.
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 пока нельзя.
.
AlkatraZ
╭∩╮ (`-`) ╭∩╮
# L!MP (13.11.2016 / 20:44)
И вот тут мне не нравится то, что наш EntityManager, как бы дважды реализует EntityCollectorInterface, первый раз - через наследование EntityCollector, а второй - через, имплементацию EntityManagerInt
А на кой хрен ты наследуешь интерфейсы?
Тут же у тебя вырисовывается вполне логичная картина:

EntityCollector -> реализует EntityCollectorInterface
EntityManager -> реализует EntityManagerInterface

И под конец, EntityManager наследуется от EntityCollector.
Все четко и красиво.
.
AlkatraZ, EntityManagerInterface должен описывать весь интерфейс EntityManager который включает в себя функционал EntityCollector и, соответственно, EntityColletorInterface.
.
# AlkatraZ (13.11.2016 / 21:32)
И под конец, EntityManager наследуется от EntityCollector.
Все четко и красиво.
EntityManagerInterface сам по себе должен описывать ВЕСЬ функционал EntityManager.
.
╭∩╮ (`-`) ╭∩╮
# L!MP (13.11.2016 / 21:37)
EntityManagerInterface сам по себе должен описывать ВЕСЬ функционал EntityManager.
Ну и пусть описывает. В чем проблема то?
.
# AlkatraZ (13.11.2016 / 21:39)
Ну и пусть описывает. В чем проблема то?
Ну так я же обозначил проблему: как бы дважды реализует интерфейс.
И вот тут мне не нравится то, что наш EntityManager, как бы дважды реализует EntityCollectorInterface, первый раз - через наследование EntityCollector, а второй - через, имплементацию EntityManagerInterface.
.
(\/)____o_O____(\/)
это жесть как по мне, трейты могу заменить интерфейсы, но тут явно что то не так
.
# AlkatraZ (13.11.2016 / 21:39)
Ну и пусть описывает. В чем проблема то?
Не, дублировать код и описывать интерфейс EntityCollectorInterface в EntityManagerInterface без наследования я не буду.
Всего: 713