Ada*_*lor 7 architecture perl web-applications catalyst job-queue
我正在使用Catalyst框架编写Web应用程序.我还使用了一个名为TheSchwartz的作业队列.
我想要使用作业队列,因为我希望尽可能多的特定于应用程序的代码与Web应用程序接口代码分离.
基本上整个系统由三个主要部分组成:
因此理论上,GUI为爬虫创建作业,从而为"攻击组件"创建作业.
目前我在Catalyst中有一个Model,它实例化一个TheSchwartz对象,以便Web应用程序中的控制器可以将作业添加到作业队列中.
我还需要创建一些工作者脚本来持续监听(/检查数据库)新的作业,以便他们可以执行所需的操作.目前TheSchwartz的数据库特定内容是在Catalyst中的模型中,我认为我不能轻易访问Catalyst之外的内容?
我不想在模型中复制TheSchwartz作业队列的数据库连接数据,然后在我的作业工作者脚本中复制数据库连接数据.我应该在位于Catalyst外部的另一个类中包装TheSchwartz对象的创建,并在当前实例化TheSchwartz对象的模型中调用它吗?然后我也可以在工作脚本中使用它.或者我应该在配置文件中包含数据库数据并在需要时实例化新的TheSchwartz对象(在Catalyst /内部作业工作者脚本中)?
或者我只是在想这个?
一些内容丰富的Web应用程序架构文章的链接也可能很有用(我之前从未构建过一种复杂的复杂性).
干杯
您使用 DBIx::Class 吗?即使您不是,这里的基本思想也适用,但我将继续假设您是。
Catalyst 模型应该是另一个类的包装器,只提供足够的行为来与 Catalyst 交互,而不是其他。例如 Catalyst::Model::DBIC::Schema 只是 DBIx::Class::Schema 的包装。它从 Catalyst 获取配置并将其传递给 DBIC,将 ResultSet 注入模型名称空间(这样您就可以实现这一$c->model('DB::Table')
目的),然后它就退出了。
优点是,由于所有重要代码都位于 Catalyst::Model 之外,因此它完全独立于 Catalyst。您可以从维护脚本或作业队列工作人员或其他任何方式加载您的架构,向其传递一些配置,告诉它连接并运行,而无需调用 Catalyst。ResultSet 中的所有信息和逻辑以及其他内容在 Catalyst 外部和内部同样可用。
归档时间: |
|
查看次数: |
1172 次 |
最近记录: |