2014-01-23 31 views
1

我正在写一个“主”API调用,从不同的供应商那里获取相同的信息。战略模式是从不同来源获取相同信息的好选择?

例如,假设有2个供应商和我有机会获得他们各自的REST API拉来自用户Jane的好友列表:

厂商1让我从珍一些朋友。

供应商2也给我一些 Jane的朋友,但供应商2给我的朋友列表可能(或可能不)与供应商1给我的朋友列表不同。

我需要编写一个脚本,从两个供应商提取列表,将它们合并并从中删除重复项。

我正在考虑使用战略模式来实现这一目标,以便我可以在运行时交换API调用实现,但我不知道这是否适合这种模式。

如果不是,那么什么设计模式可以让我有可变数量的API调用实现,并且如果需要加班,还可以添加更多?

我打算使用的语言是PHP,如果这会影响您的答案。

+0

只要做到这一点,重要的是一个解决方案,最好工作的固体代码。如果你不确定它已经是一个好的解决方案,不要考虑你应该使用什么样的模式。一个模式的名称,或者即使你使用一个没关系。 – MikeSW

+0

不要听@MikeSW :)在现实世界中,你通常不会看到以它们的模式命名的东西,但好的代码通常不符合标准设计模式的结构,因此绝对值得思考关于这个......虽然在你做了一段时间之后,它会成为第二天性,而不会被你明确地停下来思考。 –

回答

2

在我看来,您希望避免的关键是混合您的代码,该代码将您的列表与创建API调用所需的逻辑相结合并进行重复数据删除。你应该看的设计模式将是一个Repository模式。不知道错综复杂的情况下面是我如何布置它:

每个使用API​​的对象都应该实现相同的“FriendRepository”接口,它允许您获取好友列表。

然后,您将拥有FriendCompiler类,该类具有FriendRepository接口列表。在您的代码中,您将遍历FriendRepositories列表,获取朋友并编译最终列表。 FriendCompiler类将不知道任何API的实现细节,并且该列表允许您在运行时从FriendCompiler类添加,更改或删除FriendRepository。

+0

存储库本质上只是一个专门的策略版本 –

2

策略=模式'可以在运行时选择算法的行为'(维基百科)。因此,这表明它是适合您问题的模式。