【发布时间】:2017-01-26 10:28:44
【问题描述】:
这个问题有点难以解释,但我会尽力而为。
说,我正在创建一个工作添加聚合器站点。为此,我将爬过 10 个工作站点,解析 HTML 并得到所有的果汁。
现在,由于每个网站的模板、网址和它们包含的信息量都是独一无二的,所以有些东西告诉我抓取部分 应单独组织。
通常情况下,我可以将它们放在一起
class CrawlerController extends Controller {
public function fooDotComAction(){
}
public function barDotNetAction(){
}
}
你可以看到上面仍然比将我所有的爬虫逻辑转储到 DefaultController 中要好, 但即使是我的示例似乎也没有效率或模块化。
这似乎是一种不好的做法,如果 Symfony 中有某种功能,我正在徘徊 为此类问题提供了实现或指南。
【问题讨论】:
-
在控制器中进行爬行似乎是一个糟糕的开始。您可能想要创建一个进行爬取的服务。一个好主意可能是为每个站点编写一个服务/类以进行爬网,理想情况下实现一个通用接口。实际运行这些服务会更适合从命令行,因此您可能需要考虑为此编写命令。
-
@Gerry 是的,这听起来像我想要的。现在的问题是找出服务是什么,如何创建并将其集成到应用程序中
-
服务基本上是一个普通的 PHP 类,例如
FooDotComCrawler。编写完成后,您可以在 DIC 中注册它以在您的控制器和命令中使用,请参阅symfony.com/doc/current/service_container.html -
这主要是基于意见的问题,因此不太适合 SO。不过,还是不要想太多。根据你目前的能力进行开发,阅读设计模式和 SOLID 原则,查看其他实现,模式会一点一点地为你出现。但是,无论您最终选择何种设计,无论您的经验水平如何,在一段时间内都会显得过时。 现在拥有功能性的东西比完美永远不会更好。
标签: php oop design-patterns symfony