繁体   English   中英

DI与自动生成的Web服务客户端

[英]DI with auto-generated web service clients

我正在尝试在整个应用层中进行依赖注入,并且遇到了我确信其他人已经看到的场景。 我们使用了一些第三方Web服务,并且使用基类自动生成客户端。 客户端没有接口,数据类型位于同一文件/项目中。

显而易见的问题是,如果我想进行单元测试,我需要模拟服务。 我需要提取一个接口并将数据类型移动到真实/模拟客户端可用的“合同”项目中。 但是,下次自动生成客户端时,需要重做工作。 在运行时创建代理没有多大帮助,因为我们必须从WSDL手动创建接口和数据类型。 有没有更好的方法来处理这个?

从实现中提取接口无论如何都不会对你有所帮助,因为它将是一个糟糕的抽象。

接口应由使用接口的客户端定义和拥有。 正如敏捷原则,模式和实践所解释的那样, “客户[...]拥有抽象接口” (第11章)。 因此,任何定义以数据为中心的接口的尝试,例如从自动生成的Web服务客户端提取接口,都必然会迟早引起问题,因为它违反了各种SOLID原则,如依赖性倒置原则或接口隔离原则。

相反,您的客户端代码应该定义他们需要的接口。 然后,您始终可以使用自动生成的Web服务客户端实现这些接口。 如果您使用过Microsoft的工具(Visual Studio,wsdl.exe等),则相关的自动生成的类应该已经是一个部分类 ,这意味着您应该能够向其添加行为而不触及自动生成的部分它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM