Что такое "программирование на основе интерфейса"?
Я часто слышу/читаю о программировании на основе сопряжения, но я не совсем понимаю, что это на самом деле означает. Является ли сопряженное программирование актуальной отдельной темой, на самом деле есть книги, написанные об этом? Если да, можете ли кто-нибудь рекомендовать какие-либо хорошие?
Я столкнулся с программированием на основе интерфейса, поскольку я читал о том, как хороши API-интерфейсы, и хотел бы узнать больше об этом. Сейчас я не совсем понимаю, как правильно разрабатывать API-интерфейсы.
Любая информация приветствуется.
Ответы
Ответ 1
Это в основном вопрос выражения ваших зависимостей в терминах интерфейсов вместо конкретных классов (или, что еще хуже, статических методов). Поэтому, если одному из ваших классов необходимо выполнить аутентификацию, ему должен быть предоставлен IAuthenticator
(или что-то еще).
Это означает, что:
- Вы можете написать свой код перед реализацией реальной зависимости
- Вы можете протестировать через насмешку очень легко (без необходимости издеваться над классами, которые становятся уродливыми)
- Он очищает то, от чего вы зависите, в терминах API, а не от реализации (т.е. у вас есть более слабое соединение).
Ответ 2
Глава 6 "Практический дизайн API" Ярослава Тулаха называется "Код против интерфейсов, а не реализации". В нем объясняется, что путем кодирования интерфейса, а не конкретной реализации, вы можете разделить модули (или компоненты) в системе и, следовательно, повысить качество системы.
Бертран Мейер в OOSC2 объясняет, почему "закрытие" системы и ее модульность повышает ее качество.
Ответ 3
Посмотрите, помогают ли эти очень популярные обсуждения:
Какова лучшая аналогия, помогающая программистам на основе не-oop-разработчиков?
Почему я хочу использовать интерфейсы?
Когда нужны интерфейсы?
Когда нужно использовать интерфейсы?
Какова цель интерфейса?
Хороший пример для интерфейсов
Что означает "программировать интерфейс" ?
Ответ 4
Если вы используете Google для интерфейсов, вы найдете много информации о том, насколько полезны интерфейсы.
Концепция заключается в определении четких интерфейсов, которые будут использоваться различными компонентами/частями/классами/модулями для взаимодействия и взаимодействия. После того, как вы определили, какой должен быть вход/выход этих интерфейсов, вы можете позволить различным командам разрабатывать все, что необходимо для выполнения требований интерфейса, включая тестирование ввода/вывода, и т.д.
Если вы будете следовать этому шаблону, различные команды могут начать разработку своей части, не дожидаясь готовности других частей. В дополнение к этому вы можете использовать модульное тестирование (используя поддельные объекты для имитации других частей, которые вы не разрабатываете, и проверьте свою часть).
Этот метод является вполне стандартным для любого нового проекта программирования, и все это считают само собой разумеющимся.
Ответ 5
То, что вы называете "программирование на основе интерфейса", чаще всего называется программированием на интерфейс. Ниже приведен пример. Преимущество скрывает фактическую реализацию интерфейса и позволяет вашему коду быть более гибким и легко поддерживать в будущем.
YourInterface foo = CreateYourInterface();
foo.DoWork();
foo.DoMoreWork();
CreateYourInterface() вернет конкретную реализацию YourInterface. Это позволяет вам изменить функциональность приложения, изменив одну строку:
YourInterface foo = CreateYourInterface();
Ответ 6
Это то, что я не рекомендую сильно использовать в разработке С#.
Интерфейсное программирование - это в основном программирование для интерфейсов. Вы разрабатываете интерфейсы, которые собираетесь использовать Контракты, и фактическая реализация интерфейсов скрыта за этими контрактами.
Это было очень распространено до .NET, поскольку лучший способ получить повторно используемые компоненты в Windows - через COM, который работал через интерфейсы повсюду. Однако, учитывая способность .NET поддерживать несколько языков с одной средой выполнения (CLR), а также превосходную поддержку для управления версиями по сравнению с собственным кодом, полезность программирования на основе интерфейса значительно уменьшается при программировании на С# ( если вы не пытаетесь создать COM-компоненты, и в этом случае вы все равно будете создавать интерфейсы COM косвенно со своих классов С#).
Ответ 7
Программирование на основе интерфейса можно рассматривать как развязывание реализации функциональности и способа доступа к функциям.
Вы определяете интерфейс
interface ICallSomeone {
public bool DialNumber(string number);
}
и вы пишете свою реализацию
public class callsomeone: ICallSomeone {
public bool DialNumber(string number) {
//dial number, return results
}}
Вы используете интерфейс, не заботясь о реализации. Если вы измените реализацию, ничего не волнует, потому что она просто использует интерфейс.
Ответ 8
С очень абстрактного вида программирование на основе интерфейса сродни компонентам, используемым водопроводчиком (соединения труб и труб).
Пока трубы и соединения изготавливаются в соответствии с указанным интерфейсом (количество нитей и расстояние и т.д.), различные производители могут обеспечивать соединения труб, которые потенциально могут быть изготовлены каким-либо другим поставщиком (но придерживаясь вышеупомянутого интерфейс соединения/трубы).
Таким образом, существует более функциональная совместимость компонентов и свобода для водопроводчика, чтобы выбирать из разных поставщиков, диапазонов цен и т.д., чтобы создать функциональную систему водопровода.
Замените трубы и соединения на программные компоненты, и параллели удивительно просты.