【问题标题】:Business Delegate Vs Service Locator业务代表与服务定位器
【发布时间】:2013-01-18 19:11:00
【问题描述】:

Business Delegate 和Service Locator 有什么区别。Do 都负责封装查找和创建机制。如果Business Delegate 使用Service Locator 来隐藏查找和创建机制,那么Business Delegate 是什么意思,不能Service Locator替换业务代表。

【问题讨论】:

  • 嗯...只有您知道您希望将解耦概念带到多远。从概念上讲,这两者是为了做不同的事情……正如 Gamb 下面的回答所暗示的那样。但是,是的,可以在同一个组件中查找 EJB 引用并公开业务方法。对于具有较少业务方法和较少查找的较小应用程序,请使用一个组件。对于较大的,使用不同的组件
  • 所以 Kaushik,如果我们说 Business Delegate 和 Service Locator 都可以在较小的应用程序中完成相同的工作并且其中一个可以替换另一个是否正确。
  • 是的……这是我的理解。

标签: java jakarta-ee design-patterns ejb


【解决方案1】:

我不知道你是否已经checked this 退出了,但这是一个好的开始。

使用业务委托来封装对业务服务的访问。 Business Delegate 隐藏了业务服务的实现细节,例如查找和访问机制。

Service Locator 封装了基于通用注册表搜索和/或获取某个服务的位置、限制和必填字段所需的逻辑。业务代表封装了一组相关服务,并以一种内聚的方式公开它们,以防止服务客户不得不搜索和访问与特定功能相关的所有服务。

此外,您还可以防止客户必须真正了解服务定位器及其应使用的服务,而将其留给特定的业务代表。客户端只需要该委托来执行一组相关任务或依赖于各种服务的任务。


示例

业务代表实际上并不封装一组服务定位器。它在服务定位器之上提供了一个抽象层,以提供一个内聚的服务子集。通常只有一个 Service Locator 实例,多个实例需要额外的映射,您应该知道哪个 Service Locator 提供了 Service X,把它想象成您需要一个 Service Locator Locator

一个例子应该有助于澄清事情。

考虑用户帐户管理。 UserBusinessDelegate 查找注册服务以注册用户,然后查找身份验证服务以允许登录。客户端只需要一个业务代表即可访问这些服务,并且他不需要知道这两个服务的 id。

这些服务 ID 封装在 UserBusinessDelegate 中,避免了声明 ID 和在任何地方使用服务定位器的需要。想一想,如果一个服务 id 发生变化会发生什么?

在这种情况下,负责的业务代表会更新,避免对客户造成直接影响。

【讨论】:

  • Gamb,能否请您提供一个场景。正如您所说,Service Locator 封装了搜索和/或获取位置所需的逻辑(即查找和访问机制),Business Delegate 封装了一组相关服务并将它们暴露出来,那么我们可以说Business Delegate封装了一组Service Locator,用于相关服务的查找和访问机制吗?
  • 我已经更新了我的答案,我希望这个例子有助于澄清事情。正如其他人所说,业务代表在某些复​​杂的环境中很有用。小型应用程序很适合使用服务定位器。
  • 谢谢 Gamb,如果我们为用户帐户管理创建一个服务定位器,那么服务定位器的作用是什么。业务代表--->服务定位器-->注册服务
  • 流程是:Business Delegate 公开功能,当客户端请求它时,Delegate 询问 Service Locator 在哪里可以找到它,Service Locator 提供信息,Delegate 使用服务,最后,将处理的结果返回给用户。所以基本上你是对的。
【解决方案2】:

这些模式有一个共同点,因此这个问题很有意义。

它们都帮助客户端使用服务。

假设我们将服务公开为 EJB、WS 或 POJO。 客户端可以直接使用服务定位器访问此类服务。 (允许在这个组件中封装一些复杂性) 这改进了客户端的代码,但客户端仍然负责了解服务的公开方式。 (他必须为特定服务选择正确的服务定位器)。

此解决方案的一个缺点是客户端将与服务高度耦合。 例如: a) 如果明天作为 EJB 公开的服务更改为 WS,我们必须更改客户端的代码(使用另一个服务定位器)。 b) 如果我们想使用模拟服务测试客户端的代码,我们必须更改代码。

业务代表上门降低耦合度。 现在客户端与业务代表进行交互(在更高的抽象级别),因此他不需要了解有关服务实现细节的任何其他信息。

当然,由于业务代表与他交互,服务定位器仍然有用。

以最简单的方式,我喜欢将 Business Delegate 视为接口(改进解耦),将 Service Locator 视为助手(封装与基础设施相关的行为)

【讨论】:

    猜你喜欢
    • 2013-01-22
    • 2014-09-29
    • 2010-12-22
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 2011-12-06
    相关资源
    最近更新 更多