Совершенно возможно пойти Ваша целая жизнь как .net разработчик и никогда не писать Ваши собственные интерфейсы. В конце концов, мы выживали прекрасный без них в течение многих десятилетий, и наши языки были все еще полны по Тьюрингу.
я не могу сказать Вам, почему Вам нужны интерфейсы, но я могу дать Вам список того, где мы используем их в нашем текущем проекте:
В нашей сменной модели, мы загружаем плагины интерфейсом и предоставляем тот интерфейс сменным писателям для приспосабливания.
В нашей системе обмена сообщениями межмашины, классы сообщений вся реализация определенный интерфейс и "развернуты" с помощью интерфейса.
Наша система управления конфигурацией определяет интерфейс, используемый, чтобы установить и получить параметры конфигурации.
у Нас есть один интерфейс, который мы используем для предотвращения противной проблемы циклической ссылки. (Не делайте этого, если Вы не имеете к.)
я предполагаю, существует ли правило, оно должно использовать интерфейсы, когда Вы хотите сгруппировать несколько классов в рамках - отношения, но Вы не хотите обеспечивать любую реализацию в базовом классе.
Вот что говорится в спецификации EJB:
Выбор между локальной и удаленной моделью программирования - это проектное решение, которое поставщик компонентов принимает при разработке корпоративного компонента.
Хотя для корпоративного компонента можно предоставить и удаленное клиентское представление, и локальное клиентское представление, чаще будет предоставлено только одно или другое .
Поэтому при написании Если бин подумал, кто является клиентом, очень маловероятно, что локальному клиенту понадобятся те же методы или даже тот же бин, что и удаленному.
Я не согласен с тем, что во время разработки удаленный и локальный должны рассматриваться как тривиально взаимозаменяемые.
Во-первых, при удаленном вызове есть накладные расходы, поэтому при разработке удаленных интерфейсов вам необходимо чтобы тщательно обдумать, правильно ли у вас есть детализация и размеры параметров. Так что напоминание , что это будет сравнительно дорого , будет полезно как дизайнеру.
Кроме того, учитывая, что параметры удаленных интерфейсов передаются по значению, а параметры локального интерфейса передаются по ссылке, существуют фундаментальные семантические различия между этими двумя случаями, поэтому вы можете выбрать дизайн двух интерфейсов по-разному.
Понятие «прозрачность местоположения» - опасный антишаблон. Вашему проекту абсолютно необходимо знать, выполняет ли он локальный вызов или удаленный вызов, по многим причинам (обработка ошибок и производительность являются наиболее очевидными).
Удаленные интерфейсы EJB отличаются от своих локальных аналогов, потому что сигнатура исключения должна быть отличается, чтобы учесть ошибки, связанные с сетью, которые могут возникнуть только при удаленном вызове. Передача багажа удаленной обработки на локальный интерфейс (как это было в случае с EJB 1) делает код ужасным. EJB 2 представил отдельные локальные интерфейсы для упрощения программирования для EJB, которые всегда были локальными.
Хорошая причина в том, что вы получаете доступ к EJB через его интерфейс. Таким образом вы передаете параметр по значению при использовании удаленного интерфейса и по ссылке при использовании локального интерфейса. И знаете, почему такое поведение? в этом есть смысл: возможно, вы хотите, чтобы удаленное приложение получало доступ к вашему бизнес-объекту, и потому что передача по ссылке снижает задержку в сети. Помните: удаленный доступ включает в себя процесс преобразования объекта в поток байтов - маршалинг - и процесс преобразования потока байтов в объект - демаршалинг.