Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在symfony中创建单独的职责?_Php_Oop_Design Patterns_Symfony - Fatal编程技术网

Php 如何在symfony中创建单独的职责?

Php 如何在symfony中创建单独的职责?,php,oop,design-patterns,symfony,Php,Oop,Design Patterns,Symfony,这个问题有点难解释,但我会尽力的 比如说,我正在创建一个作业添加聚合器站点。为此,我有10个工作网站,我将爬过,解析HTML 并得到所有的果汁 现在,由于每个网站的模板、url和它们包含的信息量都是唯一的,所以有一些东西告诉我爬行的部分 应该分开组织 通常情况下,我可以把它们放在一起 class CrawlerController extends Controller { public function fooDotComAction(){ } public fun

这个问题有点难解释,但我会尽力的

比如说,我正在创建一个作业添加聚合器站点。为此,我有10个工作网站,我将爬过,解析HTML 并得到所有的果汁

现在,由于每个网站的模板、url和它们包含的信息量都是唯一的,所以有一些东西告诉我爬行的部分 应该分开组织

通常情况下,我可以把它们放在一起

class CrawlerController extends Controller {

    public function fooDotComAction(){

    }

    public function barDotNetAction(){

    }
}
您可以看到,上面的操作仍然比在DefaultController中转储所有爬虫逻辑要好, 但即使是我的例子似乎也没有效率,也没有模块化

这似乎是一种不好的做法,我想知道Symfony中是否有这样的功能
为此类问题提供实现或指南

您的问题太宽泛,但您已经找到了适合您需求的设计模式,然后将其付诸实施。您需要创建php类并将它们声明为服务

Symfony提倡面向服务的体系结构的思想,并拥有强大的关注点分离解决方案:。简而言之,该组件提供:一个用于配置、绑定和创建独立服务对象的工具

您的业务代码将包含在域服务中,您的控制器将只组织输入和输出,并调用域服务签出

以及2个链接视频和说明。(,)


它将向您展示如何以一种干净的方式,使用标记服务和编译器传递来分离每个“爬虫程序”,我认为这是一种干净的方法。

但是这个答案是多种多样的,您有任何技术解决方案吗?我将阅读手册,但举个例子有助于lot@mvrht,你不能指望在一个非常开放的问题上有一个非常具体的答案。@Gerry是的,我知道这是让人困惑的原因me@mvrh不抱歉,但是你可以在github上查看一些项目?在控制器中进行爬行似乎是一个糟糕的开始。您可能需要创建一个执行爬网的服务。一个好主意可能是为每个站点编写一个服务/类进行爬网,理想情况下实现一个公共接口。实际运行这些服务将更适合于命令行,因此您可能需要考虑编写命令。现在的问题是找出什么是服务,如何创建服务并将其集成到appA服务中基本上是一个普通的PHP类,例如
FooDotComCrawler
。一旦你写了它,你可以在DIC中注册它,用于你的控制器和命令,看这主要是基于意见的问题,所以不太适合这样做。但是,不要想得太多。根据您目前的能力进行开发,阅读设计模式和坚实的原则,查看其他实现,然后一点一点地为您呈现模式。但无论你最终选择什么样的设计,无论你的经验水平如何,总有一天你会觉得过时。现在有功能的东西总比永远完美的东西好。