Совместное использование LDAP-соединения между классами - лучшие практики? - PullRequest
1 голос
/ 22 ноября 2011

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

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

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

Есть идеи по этому поводу?

Ответы [ 2 ]

1 голос
/ 22 ноября 2011

Недопустимо создавать служебный класс или любой другой класс, который предоставляет широкий спектр услуг.Классы должны предоставлять один сервис или группу строго контролируемых сервисов, в противном случае вы также можете вернуться к общим блокам мусора FORTRAN.Чтобы разделить соединение LDAP между классами, инкапсулируйте соединение (это также поможет скрыть детали API).Затем защитите методы, если необходимо, путем аутентификации с использованием учетных записей на сервере каталогов.Например, метод close() должен требоваться для аутентификации в учетной записи, которая имеет близкие привилегии, или является членом закрытой группы, или любого другого authn / authz, который вы предпочитаете.Вы должны использовать UnboundID LDAP SDK для этого типа работы.См. Также « LDAP: Практика программирования ».

1 голос
/ 22 ноября 2011

Я не знаю, почему у вас есть несколько классов, работающих с LDAP. Возможно, вам следует рассмотреть возможность объединения этих разрозненных операций в один класс, который несет всю ответственность за операции LDAP.

Если это невозможно, ваши инстинкты верны. Класс, который открывает соединение, должен закрыть его в блоке finally. Это должен быть класс обслуживания POJO на основе интерфейса, который знает о единице работы для этого варианта использования. Не должно быть никаких сомнений в том, где лежит ответственность. Если у вас нет такой услуги, создайте ее.

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

Вы объединяете свои соединения LDAP? Я надеюсь на это.

Я бы порекомендовал взглянуть на Spring LDAP модуль , особенно если вы уже являетесь пользователем Spring. Это упрощает работу с ресурсами LDAP так же, как и JDBC.

...