Является ли слабая связь более надежной (на основе API поиска от netbeans)?

Недавно я просмотрел обучающие видеоролики по разработке платформы Netbeans (теперь известные как следы) (http://www.netbeans.org/kb/trails/platform.html)

и мне было интересно, насколько стабильно использование Lookup от Netbeans

это то, что я понял о том, как работает поиск

как изображение :

введите здесь описание изображения

как псевдокод (структура класса):

{

((class A implements MyInterface)) , ((class B implements MyInterface))


[MyInterface (API)]

[CoreApplication] ([Lookup provide access to A and B via MyInterface ])

}

Мой вопрос заключается в том, что вышеприведенная реализация создает надежный результат по сравнению с сильно связанными (также подумайте о сценарии, в котором доступ к статическим переменным, методам и внутренним классам осуществляется из других классов)?

[Мне нужно знать, что если я использую слабую связь и использую API поиска для ее реализации. станет ли моя программа более или менее надежной по сравнению с жестко связанной. (под надежным я подразумеваю такие факторы, как стабильность приложения, частые сбои и т. д.)]

Если да, то как это работает?


person bhathiya-perera    schedule 15.08.2013    source источник


Ответы (2)


Я бы сказал, что это (также) зависит от вас, если это надежно.

Подумай об этом. У вас есть класс B, зарегистрированный в поиске, классу A нужна услуга, которую мог бы предоставить класс B. Все, что нужно классу A, — это сервис, не имеет значения, относится ли реализация на самом деле к классу B, классу C, классу D или чему-то еще. Итак, используя поиск, вы просто спрашиваете, доступен ли ваш сервис, и используете его, если да. И здесь речь идет о надежности. Допустим, служба, которую вы ищете, не может быть найдена при поиске, тогда вы должны убедиться, что система не сломается, если служба не будет найдена.

Сценарий в NetBeans может выглядеть так:

RequiredService s = Lookup.getDefault().lookup(RequiredService.class);
if (s != null)
{
    s.doSomething(); // In this case the responsibility of reliability lies on the side of who implemented this service.
}
else
{
    // Now it's up to you to keep it reliable and perhaps let the user know that something went not as expected.
}

Теперь образно вы «плотно» полагаетесь на реализацию RequiredService и вдруг по какой-то причине его больше нет. Поскольку модули загружаются во время выполнения в NetBeans, вы получите эти исключения ClassLoader и даже не сможете принять решение, что делать в таких случаях.

person bcause    schedule 16.08.2013

Стремление к слабой связи (и программирование для интерфейса, а не для реализации) является одним из фундаментальных принципов, которых вы должны придерживаться.

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

Это похоже на то, что вы занимаетесь бизнесом и у вас есть подрядчик, который по контракту обязан делать определенные вещи с согласованным вкладом. Когда вы решите, что вам нужен другой подрядчик (делающий ТАКИЕ ЖЕ вещи с ТАКИМ ЖЕ вкладом, но за меньшие деньги или быстрее), вы просто меняете его без каких-либо последствий для вашего бизнеса. Потому что вы не тесно связаны. Этот принцип не полагаться на какую-либо сущность и «подключаться к ней» только через интерфейс (набор предопределенных методов с фиксированным вводом/выводом) выходит за рамки концепций программирования и может применяться к другим областям жизни/бизнеса, поскольку он является полезная вещь.

person ps-aux    schedule 15.08.2013
comment
Да, но мой вопрос касается API-интерфейса поиска netbeans, а также необходимо учитывать надежность - person bhathiya-perera; 16.08.2013
comment
Я не использую API/фреймворк NetBeens, но принцип, кажется, такой же, как в EJB и других фреймворках/системах. Так обычно работает бизнес-архитектура. Вы определяете, что вы хотите (тип интерфейса), а затем запрашиваете это. Вы не заботитесь ни о чем другом. Вы хотите услуги по уборке? Вы просто говорите своему отделу закупок, приведите мне уборщика, который может сделать то-то и то-то, и они предоставят вам его (используя поиск). - person ps-aux; 16.08.2013
comment
Спасибо, сэр, мне нужно знать, что если я использую слабую связь и API поиска для ее реализации, моя программа станет более или менее надежной по сравнению с жестко связанной. (под надежным я подразумеваю такие факторы, как стабильность приложения, часто ли оно дает сбой и т. д.) - person bhathiya-perera; 16.08.2013
comment
Насчет надежности не могу сказать. Так как определенно что-то может пойти не так в поиске, если он не настроен правильно - просто, это зависит. Но это дизайн, на который вы обязательно должны пойти. Думайте о сильной связи как о ЗЛО, которого вам следует избегать. - person ps-aux; 16.08.2013