我正在构建一个中间件集成,它将从各种第三方API中提取订单,并将这些订单推入我们的系统,以及同步库存和发送发货。我想以这样一种方式构建它,这样我以后就可以添加各种零售商,而不必修改Core项目。
我已经把它构建成了几个项目:
ERP项目,因为它将返回数据,如来自ERP的模型中的订单)。目前,我的Core项目在提供程序上有一个项目引用。我想达到这样一点,核心没有硬引用这些提供者-也许他们是动态加载在运行时,检查类是否实现了一个接口。因此,从理论上讲,如果我们想与一家新零售商集成,我们只需构建获取订单/同步库存等的实现。这听起来像一种合理的方法吗?我正在考虑调查MEF的情况,但还不确定这会是什么样子。
我的问题是,例如,Retailer1需要某些配置和服务,如ApiKey、Username、Password等,在这些配置和服务中,Retailer2可能需要不同的配置数据。目前,Core项目将从数据库中检索这些详细信息。将这些信息传递给Providers的最佳方法是什么?我是否应该创建一个基本上是配置的键/值对的Configuration对象,并对接口进行编程以接受Configuration对象?并将这些值存储在数据库表中的键/值对中,而不是当前的列中。
目前,我在Core项目中创建依赖项,但这意味着Core项目与Retailer1紧密耦合,例如:
TheIconic.Services.IApiService iconicApiService = new TheIconic.Services.TheIconicApiService(
DependencyContainerProvider.Current.Container.Resolve<IWebClient>(),
instance.IntegrationPartner.ApiUrl,
instance.IntegrationPartner.ApiKey,
instance.IntegrationPartner.Username,
instance.IntegrationPartner.BasicAuthUsername,
instance.IntegrationPartner.BasicAuthPassword
);发布于 2017-05-31 03:10:44
我是否应该创建一个基本上是配置的键/值对的配置对象,并对接口进行编程以接受配置对象?
如果配置提供程序所需的全部是键/值对的列表,那么是的,这似乎是一个合理的解决方案。实际上,它是ODBC数据提供程序使用的确切解决方案(通过连接字符串,它是存储在文本blob中的键/值对的列表)。
如果需要更复杂的内容,仍然可以使用字符串,但可能不使用标记/值对,而是可以包含XML或JSON。
发布于 2017-05-28 20:45:42
将这些信息传递给提供者的最佳方法是什么?
你为什么不考虑注射DI?为提供者创建任意数量的特定数据工厂,它们使用Core类在内部构建数据,然后通过依赖注入库(如NInject )将这些工厂传递到Providers的构造函数中。这样,您的提供程序就会与核心隔离。
https://softwareengineering.stackexchange.com/questions/349681
复制相似问题