Как я могу узнать, когда создавать собственные интерфейсы

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

Я использую C # и знаю, что такое интерфейсы, как их использовать синтаксически и т. Д. но я еще не понял, что когда мне поручают написать проект, создать компонент, ... Как мне лучше узнать об интерфейсах, чтобы, когда я хочу что-то сделать, я мог подумать об их использовании в моем дизайне ... или, например, я хочу узнать о внедрении зависимостей или даже об использовании имитирующих объектов для тестирования, все это связано с хорошим пониманием интерфейсов и знает, когда и как их использовать ... Не могли бы вы дать мне хороший совет, чтение, ... тогда может мне с этим помочь?


person Bohn    schedule 19.05.2010    source источник
comment
Вы можете начать с поиска stackoverflow   -  person BlueRaja - Danny Pflughoeft    schedule 19.05.2010


Ответы (5)


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

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

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

person Davy8    schedule 19.05.2010

Какой у этих вещей должен быть общий интерфейс, если они будут использоваться одинаково?

Если вы можете ответить на этот вопрос, значит, вы на пути к разработке и правильному использованию интерфейса в реальных сценариях.

person Srikar Doddi    schedule 19.05.2010

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

Например, считается хорошей практикой использовать IList<T> вместо List<T>, потому что IList<T> только указывает, что вам нужно что-то, что действует как список. Таким образом, можно заменить другие реализации списков, не затрагивая ваш код. (Например, NHibernate, библиотека отображения объектов и доступа к данным, использует это, чтобы разрешить отложенную загрузку коллекций.)

Отличными кандидатами на роль интерфейсов являются классы, которые взаимодействуют с внешними системами (файловая система, база данных, сеть, веб-службы и т. Д.). Если вы напрямую используете эти системы в своем коде, у вас возникнут проблемы с тестированием и рефакторингом.

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

Это действительно то, что вы научитесь использовать с опытом.

person David Thibault    schedule 19.05.2010


При использовании рабочего процесса, подобного TDD, интерфейсы часто используются для определения требований, предъявляемых объектом к другому объекту, который он в конечном итоге будет использовать. Использование интерфейсов таким образом позволяет использовать их для создания «швов» в вашем приложении, где логика может быть заменена / вставлена ​​/ и т. Д.

Один из способов думать об интерфейсах таким образом - думать о ваших объектах как о отправляющих сообщения друг другу, и что интерфейсы являются определениями сообщений, которые могут быть отправлены.

person kyoryu    schedule 19.05.2010