【问题标题】:Pattern to call same object in different namespaces在不同命名空间中调用相同对象的模式
【发布时间】:2019-06-04 02:47:50
【问题描述】:

我正在用 C# 创建一个 Web 表单项目。

其中一个关键要求是发布到 API,但可用的 API 不止一个,而是多个。

目前HttpClient 对象是为不同命名空间中的每个 API 唯一定义的,如下所示:

MyCo.Myapp.PostApi.Client1.ClientObject
MyCo.Myapp.PostApi.Client2.ClientObject

除了HttpClient,还存储了端点url和媒体类型以及一些其他配置对象。

这个想法是命名空间 Client1Client2 存储在数据库中,可用于检索正确 API 的位置,以创建对象。

以上都不是一成不变的 - 它是概念形式 - 所以我想知道是否有任何其他替代方案可以考虑。

任何建议表示赞赏。

【问题讨论】:

  • API 是否对应于特定的 .NET 架构或位数?
  • 为什么要使用不同的对象,而不是使用不同配置的单个对象(配置将存储在数据库中)?
  • @ParrishHusband - 它们都是我无法控制的第三方 API,但都可以使用 HttpClient 访问。例如,内容可以是 url 编码或 json - 可能使用唯一的授权字符串和不同的标头。
  • @ErikPhilips - 我确实考虑将配置放入数据库,但它往往对每个 API 都是唯一的。担心会在数据库中创建无休止的变量混搭,这将导致代码更复杂,并且如果需要更改则难以更改。
  • 对不起,我读得不够仔细;您正在使用 Web 表单,所以我的评论可能没有那么有意义...

标签: c# asp.net interface webforms


【解决方案1】:

这似乎是Abstract Factory 方法的潜在候选者。您所描述的内容听起来很熟悉如何使用 System.Data.Common 连接到各种数据库类型

var settings = GetInfoFromDatabase();
var factory = ClientObjectFactory.Create(settings);

var clientObject = factory.CreateClientObject();
clientObject.Post("");  // This could be any of the client objects.  

但是,由于您无法控制客户端 API,您可以让底层工厂执行发布:

factory.Post(clientObject, data);

【讨论】:

  • 感谢 Parrish 的回复,我正在调查。
猜你喜欢
  • 2016-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-31
  • 1970-01-01
  • 1970-01-01
  • 2015-06-27
  • 1970-01-01
相关资源
最近更新 更多