Является ли интерфейс php избыточным для приложений, созданных одним разработчиком?

Мой вопрос: в PHP действительно полезны интерфейсы для разработчиков, которые сами создают веб-приложения? Разве абстрактный класс не предоставляет все то, что обеспечивает интерфейс?

Если интерфейс - это просто «контракт», разве разработчик не знает, что должен реализовать класс?

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

Как вы можете понять, я все еще жду того момента A-HA, когда я действительно пойму, почему интерфейс полезен.

Чтобы закончить это и выразить это просто: Когда я должен использовать интерфейсы и почему бы не использовать абстрактные классы вместо этого?

7
задан danidacar 26 August 2010 в 07:56
поделиться

4 ответа

Интерфейс — очень хороший способ разработки команд. Это создает целостность программного продукта. Первый раз команда пишет интерфейс после абстрактных классов (с общими методами и абстрактными методами).

Абстрактный класс полезен там, где мы расширяем его в разных классах. Например, метод __construct() общий для всех дочерних классов, а остальные методы отличаются.

Наша команда использует следующую модель: Интерфейс->Абстракт->Класс1->Класс2

Class1 extends Abstract implements Interface

Class2 extends Abstract implements Interface
0
ответ дан 7 December 2019 в 16:37
поделиться

Когда следует использовать интерфейсы и почему не использовать вместо этого абстрактные классы?

Как только вы используете, например, фабричный шаблон, следует использовать интерфейс. Я уверен, что есть еще примеры для этого.

Посмотрите на различные шаблоны проектирования. http://www.ibm.com/developerworks/library/os-php-designptrns/

EDIT: изменена ссылка на лучшее объяснение.

-1
ответ дан 7 December 2019 в 16:37
поделиться

Вы можете использовать интерфейсы для

  • подсказки типов в функциях public function foo(IWhatever $x)
  • для проверки типа $x instanceof IWhatever
  • Для создания фиктивных объектов в модульных тестах $this->getMock('IWhatever')

Конечно, вы можете использовать и абстрактные классы, но если вам на самом деле не нужно определять любой код, вероятно, лучше использовать интерфейс.

1
ответ дан 7 December 2019 в 16:37
поделиться

«Программирование интерфейса, а не реализация» — это принцип, представленный GoF в их книгах Design Patterns: Elements of Reusable Object- Ориентированное программное обеспечение.

Цитируя Эриха Гамму по принципу:

Поскольку вы зависите только от интерфейсов, вы отделяетесь от реализации. Это означает, что реализация может варьироваться, и это здоровые отношения зависимости. Например, в целях тестирования вы можете заменить тяжелую реализацию базы данных более легкой фиктивной реализацией. […]

Таким образом, этот подход дает вам гибкость, но он также отделяет действительно ценную часть, дизайн, от реализации, что позволяет отделить клиентов от реализации.Один вопрос заключается в том, всегда ли вы должны использовать для этого интерфейсы Java. Абстрактный класс тоже хорош. Фактически, абстрактный класс дает вам больше гибкости, когда дело доходит до эволюции. Вы можете добавить новое поведение, не нарушая работу клиентов. […]

В Java, когда вы добавляете новый метод в интерфейс, вы ломаете всех своих клиентов. Когда у вас есть абстрактный класс, вы можете добавить новый метод и предоставить в нем реализацию по умолчанию. Все клиенты продолжат работу. Как всегда, есть компромисс: интерфейс дает вам свободу в отношении базового класса, абстрактный класс дает вам свободу добавлять новые методы позже. Не всегда возможно определить интерфейс в абстрактном классе, но в свете эволюции вам следует подумать, достаточно ли абстрактного класса.

Полное интервью читайте здесь

Итак, вы можете использовать интерфейс или абстрактный класс. Вы просто должны рассмотреть компромисс. ИМО, стоит использовать интерфейсы, даже если вы один. Вы редко знаете, как ваше приложение будет выглядеть в конце. Водопад — это миф, поэтому вам придется столкнуться с изменениями во время разработки, а интерфейсы облегчают их принятие.

Вас также может заинтересовать:

и еще кое-что:

1
ответ дан 7 December 2019 в 16:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: