【发布时间】:2023-03-11 23:38:01
【问题描述】:
我正在将代码从 Controller 提取到 Symfony 3.4 应用程序中的一种 ApplicationService。
我有一个用于抓取数据的具体类和另一个用于更改一些数据的具体转换器。
src\App\Service
class CompanyScraping implements ScrapingInterface
{
private $crawler;
public function __construct(CrawlerInterface $crawler)
{
$this->crawler = $crawler;
}
public function extract()
{
...
}
public function transform()
{
$transformer = new concreteTransformer();
}
}
class concreteTransformer
{
private $em;
public __construct(EntityManagerInterface $em)
{
$this->em = $em;
}
}
如果没有在 CompanyScraping 类中调用 EntityManager,我如何将 EntityManager 传递给具体的Transformer 类?我不能用新的实例化concreteTransformer。
我正在考虑这两个选项:
将 EntityManager 传递给 CompanyScraping,但我认为这是一个错误的想法,因为 CompanyScraping 不需要此依赖项。
将转换方法提取到另一个类并从控制器/控制台传递 em
$crawler = new CompanyScraping(new GoutteClient());
$rawData = $crawler->extract(...);
$data = new concreteTransformer($em, $rawData);
还有什么想法吗?
谢谢。
【问题讨论】:
-
为什么不直接将 ConcreteTransformer 注入到 CompanyScraping 类中?