原文:Service Locator is an Anti-Pattern服务定位器模式广为人知,Martin Fowler在文章中专门描述过它。所以它一定是好的,对不对?并不是这样。服务定位器实际上是个反模式,应该避免使用。我们来研究一下。简单来讲,服务定位器隐藏了类之间的依赖 ...
原文:Service Locator is an Anti-Pattern
服务定位器模式广为人知,Martin Fowler在文章中专门描述过它。所以它一定是好的,对不对?
并不是这样。服务定位器实际上是个反模式,应该避免使用。我们来研究一下。简单来讲,服务定位器隐藏了类之间的依赖关系,导致错误从编译时推迟到了运行时,并且,在引入破坏性更改时,这个模式导致代码不清晰,增加了维护难度。
OrderProcessor 示例
我们用依赖注入话题中常见的OrderProcessor示例作说明。OrderProcessor 处理订单的过程是:先验证,通过后再发货。下面的代码使用静态的服务定位器:
public class OrderProcessor : IOrderProcessor{ public void Process(Order order) { var validator = Locator.Resolve<IOrderValidator>(); if (validator.Validate(order)) { var shipper = Locator.Resolve<IOrderShipper>(); shipper.Ship(order); } }}
原标题:[翻译] 服务定位器是反模式
关键词:
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。