最近我发现了一些与外部网络API进行通信的代码。 web api是一组返回Xml的GET / POST操作,通过HttpWebRequest从我的应用程序调用,并使用Linq到Xml操纵我。
api方法的逻辑分组构成了多个服务。我创建了表示每个服务的类。每个服务都必须通过同一组响应头联系同一个基本uri和base。也就是说,我的所有服务类之间共享一系列方法。我对这些常用方法执行了一个Extract Method to Superclass重构,并从新的超类继承了我的所有服务类。重构中涉及的所有方法都涉及配置与远程api的底层连接以及处理返回的原始数据,例如将xml反序列化为POCO。
我刚才被问到为什么我使用继承来使用基类中的方法而不是注入它。坦率地说,我没有真正的好答案,所以我想理解为什么要问这个问题以及什么是注入优于继承的优点。我知道基本的OO设计原则说我们应该支持组合而不是继承,我可以看到如何重构组合,但我不确定这会给我带来什么好处。
我的同事说过“它不仅更可测试......而且更容易测试”。我可以看到他的论点,但我想知道更多。希望我已经给出足够的信息以获得明智的回应。
答案 0 :(得分:0)
取决于:)
如果您的子类提供了基类的特殊化,那么这有利于继承,而如果基类提供更多的实用函数,那么我将使用组合。
如果您的子类只是将POCO调整为Web调用所需的格式,那么继承可能是最佳选择,但与大多数软件开发一样,cat可以通过多种方式进行蒙皮。
注入它允许您单独测试注入的代码,而不是继承,您需要子类来测试公共代码。
希望我能够提供帮助