【发布时间】:2015-06-02 19:27:24
【问题描述】:
Symfony2 的新手,我正在构建一个使用外部 API 获取数据的应用程序。我创建了许多客户端类来从 API 检索和转换每个实体,并将这些类定义为服务 - 例如,我有一个 FooClient 和 getAll() 或 getThoseThatInterestMe($me) 之类的方法,它们从 API 返回数据.
现在我想创建一个ApiClientFacade 类,它充当所有XxxClient 类前面的接口,紧随Facade Pattern - 例如,这个外观类将有一个方法getAllFoo(),它在turn 会调用FooClient::getAll(),依此类推...
我也可以将我的外观类定义为服务,但是它有太多的依赖项——我有大约 30 个客户端类。此外,使用这种方法,我每次都会加载所有 30 个依赖项,而大多数时候我只需要一个依赖项......
那么,有没有更好的方法来做到这一点?
【问题讨论】:
-
虽然通常不鼓励,但有时注入完整的容器是可以接受的。拥有 30 多个潜在依赖项,只需注入容器并根据需要提取依赖项。
-
我实现了与您在 Symfony2 中所要求的类似的东西。我使用了工厂模式、一个抽象基础服务和许多标记子服务。然后使用 CompilerPass 在 bundle 的构建方法 中添加到容器中,以便将 argument 添加到标记的类的定义中服务。这个参数是类名,所以工厂可以实例化它。在我的情况下,所有子服务都具有相同的依赖项,在父项中声明。我不确定这是否会(有)帮助(ed)你。