服务定位器模式入门
分布式应用程序的常见设计模式。
引言
在分布式应用和面向服务架构的世界中,以统一的方式透明地定位业务组件和服务已成为当务之急。大多数企业级应用需要一种查找提供对分布式组件访问的服务对象的方式。
背景
该模式的演进是为了解决
- 中心化和重用 .NET 应用客户端的查找机制的实现。
- 封装注册实现中的供应商依赖项,并向客户端隐藏依赖项和复杂性。
- 避免与初始上下文创建和服务查找相关的性能开销。
- 使用其
Handle
对象重新建立到先前访问的对象实例的连接。
服务定位器模式
服务定位器是一种由提供者驱动的 抽象
工厂设计模式,可用于创建组件服务器的实例。它支持可配置以及运行时依赖注入。
未来的组件服务可以在不同的服务器和机器上物理分布。
一个服务组件可以在应用程序之间使用。该服务将通过某种远程接口远程使用,可以是同步的或异步的(例如,Web 服务、消息系统、RPC 或套接字)。
这些核心组件旨在被组件编写者的控制范围之外的应用程序使用,且无需更改。 “无需更改”意味着使用应用程序不会更改组件的源代码,尽管他们可以通过组件编写者允许的方式扩展组件来改变组件的行为。

服务定位器模式解决了以下设计考虑因素
- 从表示层组件和客户端(例如设备、Web 服务和富客户端)访问业务层组件。
- 最大限度地减少客户端与业务服务之间的耦合,从而隐藏服务的底层实现细节,例如查找和访问。
- 避免不必要的远程服务调用。
- 将网络异常转换为应用程序或用户异常。
- 向客户端隐藏服务创建、重新配置和重试调用的细节。
服务定位器模式 - 实现顺序

摘要
多个资源可以重用服务定位器对象,以减少代码复杂性,提供单一控制点,并通过提供缓存机制来提高性能。
该模式减少了客户端的复杂性,这是客户端依赖于查找和创建过程以及需要执行这些资源密集型过程的结果。为了消除这些问题,该模式提供了一种机制,将所有依赖项和网络细节抽象到服务定位器中。
服务定位器抽象了 API 查找(命名)服务、查找复杂性和业务对象创建,并为客户端提供了一个简单的接口。这减少了客户端的复杂性。此外,相同的客户端或其他客户端可以重用服务定位器。
参考文献
结论
我将在后续文章中尝试给出关于这种设计模式的更详细的解释。