我认为我在 TT 模板中使用了太多的条件和计算。
我正在显示来自 DBIC 的项目结果集。对于每个项目,我需要使用检索到的值来计算事物,并且模板似乎不是正确的位置。
但在 Catalyst 中,它是来自 DBIC 的厚物体。
那么如何将逻辑移动到模型中呢?我必须为所有项目运行一个完整的循环并以某种方式更改对象吗?
问候:米格,
我认为我在 TT 模板中使用了太多的条件和计算。
我正在显示来自 DBIC 的项目结果集。对于每个项目,我需要使用检索到的值来计算事物,并且模板似乎不是正确的位置。
但在 Catalyst 中,它是来自 DBIC 的厚物体。
那么如何将逻辑移动到模型中呢?我必须为所有项目运行一个完整的循环并以某种方式更改对象吗?
问候:米格,
首先,通过正确分离关注点,您走在了正确的轨道上。如果您是 6-12 个月后的维护者,您会感谢自己。
恕我直言,您的 Catalyst 控制器应尽可能薄,并具有各种模型中的业务逻辑。这使得测试更容易,因为您无需处理 Catalyst 的开销。我自己一直在考虑模型分离。我遇到过两种思想流派:
1) 使您的 DBIx::Class Result 类具有业务逻辑。这种方法既方便又简单。
2) 制作一个由控制器实例化的独立模型,它有一个 DBIx::Class 模式对象。该模型将使用 DBIC 模式来查询数据库,然后在其自己的业务逻辑方法中使用结果数据。如果您有很多业务逻辑,这种方法可能会更好,因为您将数据库访问与业务逻辑分开。
就个人而言,我历来使用方法#1,但我倾向于#2 用于更大的应用程序。
两种可能。
在相应的模式类中创建一个方法。
(如果 1 不可能)将回调传递给模板,该模板将以该对象作为参数。
你可以
我个人更喜欢第二种。我希望这会有所帮助。