Совместное использование соединения LDAP между классами — лучшие практики?

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

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

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

Любые идеи по этому поводу?


person helpermethod    schedule 22.11.2011    source источник


Ответы (2)


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

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

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

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

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

person duffymo    schedule 22.11.2011

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

person Terry Gardner    schedule 22.11.2011