我需要做的是连接到一个 LDAP,然后将此连接传递给几个类,这些类执行各种处理步骤。
我面临的问题是我是否应该通过构造函数将连接传递给这些类,或者每个类都应该管理自己的连接。
我在第一种方法中看到的问题是调用者可能不知道他自己负责关闭流。第二种方法似乎也不合适,因为打开/关闭/重新打开连接也没有任何意义。
对此有什么想法吗?
我需要做的是连接到一个 LDAP,然后将此连接传递给几个类,这些类执行各种处理步骤。
我面临的问题是我是否应该通过构造函数将连接传递给这些类,或者每个类都应该管理自己的连接。
我在第一种方法中看到的问题是调用者可能不知道他自己负责关闭流。第二种方法似乎也不合适,因为打开/关闭/重新打开连接也没有任何意义。
对此有什么想法吗?
我不知道为什么你会有几个处理 LDAP 的类。也许您应该考虑将这些分散的操作组合成一个类,该类对 LDAP 操作负全部责任。
如果这不可能,那么你的直觉是正确的。打开连接的类应该在 finally 块中关闭它。那应该是基于接口的 POJO 服务类,它知道该用例的工作单元。责任在哪里应该是毫无疑问的。如果您没有这样的服务,请创建一个。
如果操作不是单个工作单元的一部分,那么它们应该由单独的服务管理。上一段的评论仍然适用。
您是否正在汇集您的 LDAP 连接?但愿如此。
我建议您查看Spring LDAP 模块,特别是如果您已经是 Spring 用户。它使处理 LDAP 资源变得容易,就像处理 JDBC 一样。
构建实用程序类或提供多种服务的任何其他类是一种糟糕的做法。类应该提供一个服务或一组严格控制的服务,否则你还不如回到 FORTRAN 垃圾公共块。要在类之间共享 LDAP 连接,请封装该连接(这也将用于隐藏 API 详细信息)。然后根据需要通过使用目录服务器上的帐户进行身份验证来保护这些方法。例如,close()
应该需要一种方法来对具有关闭权限的帐户进行身份验证,或者是关闭组的成员,或者您喜欢的任何 authn/authz。对于此类工作,您应该使用UnboundID LDAP SDK 。另请参见“ LDAP:编程实践”。