【问题标题】:Moving logic from Template Toolkit to Catalyst将逻辑从 Template Toolkit 转移到 Catalyst
【发布时间】:2012-02-08 15:36:41
【问题描述】:

我认为我在 TT 模板中使用了过多的条件和计算。

我正在显示来自 DBIC 的项目的结果集。对于每个项目,我需要使用检索到的值进行计算,而模板似乎不是正确的位置。

但在 Catalyst 中,它是来自 DBIC 的厚物体。

那么我怎样才能将逻辑转移到模型中呢?我必须为所有项目运行一个完整的循环并以某种方式更改对象吗?

问候: 米格,

【问题讨论】:

  • 谢谢大家。出于本能,我已经开始在关键点创建模型,所以我有来自控制器的“要调用的东西”,控制器调用数据库并进行计算。随着我的学习,我确信我会从内部改进模型,但我仍然会以同样的方式调用它们,从而简化重构过程。

标签: perl catalyst dbix-class template-toolkit


【解决方案1】:

两种可能性。

  1. 在相应的架构类中创建方法。

  2. (如果不可能为 1)将回调传递给模板,该模板将以该对象作为参数。

【讨论】:

  • 第一个似乎类似于link 但不确定,我不知道如何从完成查询的结果集中调用它。如果这不是我会欣赏教程或文档的方式。
  • 将其称为 $row->some_method()。您需要在架构中定义 some_method()。
【解决方案2】:

你可以

  1. 创建一个从数据库中检索数据然后计算所需值的结果集
  2. 如果可能的话,在数据库中计算所需的值,然后只检索输出所需的数据

我个人更喜欢第二个。 我希望这会有所帮助。

【讨论】:

    【解决方案3】:

    首先,您想要正确地分离关注点,这是正确的。如果您是 6-12 个月后的维护者,您会感谢自己的。

    恕我直言,您的 Catalyst 控制器应尽可能薄,并具有各种模型中的业务逻辑。这使得测试更容易,因为您无需处理 Catalyst 的开销。我自己一直在考虑模型分离。我遇到过两种思想流派:

    1) 使您的 DBIx::Class Result 类具有业务逻辑。这种方法既方便又简单。

    2) 创建一个由控制器实例化的独立模型,它有一个 DBIx::Class 模式对象。该模型将使用 DBIC 模式来查询数据库,然后在其自己的业务逻辑方法中使用结果数据。如果您有很多业务逻辑,这种方法可能会更好,因为您将数据库访问与业务逻辑分开。

    就我个人而言,我一直使用方法 #1,但我倾向于 #2 用于更大的应用程序。

    【讨论】:

      猜你喜欢
      • 2013-02-04
      • 2013-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-03
      • 2018-01-21
      • 2019-10-26
      • 2010-09-27
      相关资源
      最近更新 更多