Вурдалак
Продвинутый новичок
Ссылка на тему пятилетней давности просто для фана: https://phpclub.ru/talk/threads/final-or-not-final-that-is-the-questuion.80334/
Он зависит от неких Storage и ThumbCreator и использует только их публичные методы. Разработчику, который работает в данный момент с этим кодом, всё равно классы это или интерфейсы. Контейнер внедрения зависимостей, убрав необходимость создавать объекты зависимостей, подарил нам супер-абстракцию: классам совсем неважно знать от чего именно он зависит - от интерфейса или класса. В любой момент, при изменении условий, класс может быть сконвертирован в интерфейс, а весь его функционал перенесен в новый класс, реализующий этот интерфейс (Storage => S3Storage). Это изменение, наряду с конфигурацией контейнера зависимостей будут единственными на проекте. Весь остальной код, использовавший класс, будет работать как прежде, только теперь он зависит от интерфейса. Используя суффиксы *Interface или другие отличительные признаки интерфейсов, мы лишаем себя этой абстракции, а также загрязняем наш код.
кто блин тестит сторонние либы?вопрос тестирования сторонних либ
нормальный путь - это wrapper создавать. тестить... $this->equals(4, 2+2); ?кто блин тестит сторонние либы?нормальный путь - это wrapper создавать. тестить... $this->equals(4, 2+2); ?
Тестировать пользователей, а не стороннюю либу. Пользователей абстракции, яволь?whirlwind написал(а):PS. Что бы тема опять не вернулась к примерам первого уровня типа ImageUploader. Речь идет не о дизайне CUT, а дизайне объектов, с которыми взаимодействует CUT. Протестировать ImageUploader легко. Протестируй того, кто юзает ImageUploader, что бы понять, насколько дизайн хорош.
Если у вас 100% всего кода - это ваш собственный код
- ты рыбу ловишь?Потому что это мой API
Гриша как обычно показывает свой талант ворваться в тему и при абсолютном непонимании происходящего начать показывать свой твердый лоб."это моя корова и я ее буду доить" (С)
Я специально перечислял extends abstract и implements в одном ряду, не различая. Ок, допустим, выкинем интерфейсы, сделаем множественное наследование, что изменится-то?В Java интерфейсы появились с 1.0 (это былодо(очепятка) после первых плюсов), но если на них посмотреть повнимательнее сегодня, они обратно превращаются в классы
Я специально перечислял extends abstract и implements в одном ряду, не различая. Ок, допустим, выкинем интерфейсы, сделаем множественное наследование, что изменится-то?
public class QFReactor implements EventListener, DataProvider, SPRunnable, L1UpdateConsumer {
не будет абстракции, будет зависимость от множества реализацийвыкинем интерфейсы, сделаем множественное наследование, что изменится-то?
Я про частный случай с pure abstract classes, конечно же (впрочем, можно и не совсем pure, будет типа default methods в java)Попрошу не выражаться! Множественное наследование это совсем не то же самое, что сохранение полиморфности.