0

我想为我正在开发的 ZF 应用程序创建一个后台工作程序,但我对软件架构的困惑并不多,而是对文件系统架构的更多困惑。

控制器将触发工作人员执行某些任务,然后控制器将检查工作人员的状态,因此已涵盖该位。

从文件夹结构的角度来看,这些工人的代码应该放在哪里?

application/
  models/
  services/
    worker/
      application/ --> code for the worker (standard ZF structure)
      worker.php   --> entry-point to the worker

或者

application/
  controllers/
    WorkerController.php
  models/
    Worker/
      Class.php
      Class2.php
  services/
    worker.php --> entry-point to the worker

请记住,主应用程序和工作程序的配置几乎相同(尤其是相同的数据库连接凭据、自动加载设置),工作程序需要访问主应用程序的模型。

任何建议或意见将不胜感激。

非常感谢,天使

4

2 回答 2

1

MVC 不仅在 Web 环境(Apache)中有用,你也可以将它用于“后台工作人员”(视图是你的控制台),你只需要添加一个 cli.php 或其他东西,处理 cli 参数(模块,控制器, action),创建请求对象并将其传递给调度程序。

因此,您如何触发后台工作程序(执行?),调用您新创建的 cli.php 并享受您的 zf 应用程序的功能(配置、自动加载、..)。

简而言之,我无法告诉您 cli.php 究竟长什么样,但我找到了本教程: 从命令行使用 Zend Framework

对您来说重要的对象:Zend_Controller_Request_Simple

于 2012-05-01T21:20:04.843 回答
1

如果工作人员是通过 cronjob 触发的,那么您可以 使工作人员组件成为一个模块,因此它有自己的控制器、视图等。然后 - 正如 @MonkeyMonkey 所指出的那样 - 您的命令行脚本可以向该模块发出 MVC 请求。

但在我看来,这个工作组件可能更自然地作为服务运行,一个包含由您的 cron 触发的 cli 脚本调用的功能的类。基于 ZF 的 cli 脚本 - 可选地使用Zend_Console_Getopt,这很酷 - 可以使用相同的配置和 Bootstrap 类,有选择地引导资源(基于 cli 的任务可能不需要一些资源),并使用与标准 MVC 应用程序相同的自动加载器.

正如您所注意到的,这些工作人员将更新应用程序面向 Web 的部分可以访问的状态表,因此这些页面可以根据请求读取/呈现状态。

至于它的文件系统结构,您可以将这些服务类命名为Application_Service_MyWorker存储在文件中application/services/MyWorker.phpApplication_Service_Worker_MyWorker甚至可能使用诸如stored in之类的东西进一步下推application/services/Worker/MyWorker.php,尽管后者可能需要在资源自动加载器中添加另一个资源类型条目,类似于在中定义映射器和基于 DbTable 的模型的方式Zend_Application_Module_Autoloader

于 2012-05-02T05:50:23.707 回答