我将拥有(并且已经拥有)一个构建通用数据结构的层(可能从您的数据库中检索一些数据以创建结构),一个数据映射层,将其转换为具有与第三方结构一致的属性名称的结构,以及组成请求的请求层。
听起来你已经弄清楚了其中的一些。如果您正在执行某种听起来像您想要的“配置”方法,那么请求层就像一个输出配置。即,如果您考虑许多报告引擎,您可以选择 HTML、CSV、Excel、Interactive 等输出。如果您的新第 3 方对 XML 数据使用与前一个相同的约定,但数据结构或数据可能略有不同,那么您可以重用相同的请求“类别”/RequestType 或您想要调用的任何内容。我个人称这些 RequestTypes。因此,即使您必须为该请求类型编写代码和类,但如果设计得当,希望它可以被重用。每个 RequestType 类都应该设计成可重用的,
一种工厂模式,允许您调用类似的东西GetRequestType( database.SomeThirdParty.RequestTypeEnumValue )
,它接受一个指示 RequestType 的枚举或字符串并返回一个类。由于该类应该实现一些通用接口/基类,它可以继续传递数据结构并调用诸如 SendRequest() 之类的东西,而不必知道它正在使用哪个请求类型类。
这样做的好处是,当您遇到第 3 方的实现完全不称职的情况时,您必须为他们编写特殊代码,然后您可以为他们创建一个新的 RequestType 类。创建一个完全通过配置允许 3rd 方集成并可以处理所有可能场景的系统将是一项具有挑战性的任务。当我看到系统如此复杂以至于它们允许像这样完全无代码的实现时,你最终会得到一些非常复杂的东西。再次以报表引擎类比为例,我在报表中看到了一些非常复杂的东西,而这些东西在代码中会更直接。是的,报告引擎足够“复杂”,可以让别人去做,但代价是什么?