Почему мы должны разделить Удаленные и Локальные интерфейсы для бобов EJB 3.0 сессии

Совершенно возможно пойти Ваша целая жизнь как .net разработчик и никогда не писать Ваши собственные интерфейсы. В конце концов, мы выживали прекрасный без них в течение многих десятилетий, и наши языки были все еще полны по Тьюрингу.

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

  1. В нашей сменной модели, мы загружаем плагины интерфейсом и предоставляем тот интерфейс сменным писателям для приспосабливания.

  2. В нашей системе обмена сообщениями межмашины, классы сообщений вся реализация определенный интерфейс и "развернуты" с помощью интерфейса.

  3. Наша система управления конфигурацией определяет интерфейс, используемый, чтобы установить и получить параметры конфигурации.

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

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

38
задан BalusC 30 June 2016 в 07:34
поделиться

4 ответа

Вот что говорится в спецификации EJB:

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

JSR220 Глава 3

Поэтому при написании Если бин подумал, кто является клиентом, очень маловероятно, что локальному клиенту понадобятся те же методы или даже тот же бин, что и удаленному.

15
ответ дан 27 November 2019 в 03:53
поделиться

Я не согласен с тем, что во время разработки удаленный и локальный должны рассматриваться как тривиально взаимозаменяемые.

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

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

12
ответ дан 27 November 2019 в 03:53
поделиться

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

Удаленные интерфейсы EJB отличаются от своих локальных аналогов, потому что сигнатура исключения должна быть отличается, чтобы учесть ошибки, связанные с сетью, которые могут возникнуть только при удаленном вызове. Передача багажа удаленной обработки на локальный интерфейс (как это было в случае с EJB 1) делает код ужасным. EJB 2 представил отдельные локальные интерфейсы для упрощения программирования для EJB, которые всегда были локальными.

8
ответ дан 27 November 2019 в 03:53
поделиться

Хорошая причина в том, что вы получаете доступ к EJB через его интерфейс. Таким образом вы передаете параметр по значению при использовании удаленного интерфейса и по ссылке при использовании локального интерфейса. И знаете, почему такое поведение? в этом есть смысл: возможно, вы хотите, чтобы удаленное приложение получало доступ к вашему бизнес-объекту, и потому что передача по ссылке снижает задержку в сети. Помните: удаленный доступ включает в себя процесс преобразования объекта в поток байтов - маршалинг - и процесс преобразования потока байтов в объект - демаршалинг.

1
ответ дан 27 November 2019 в 03:53
поделиться
Другие вопросы по тегам:

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