0

对于使用 MVC 架构的项目,这更像是一个编码风格问题。

我正在使用 Yii 框架开发一个项目。每个数据库表都有自己的模型类,让我可以利用 Yii 的 Active Record 东西。凉爽的。

但是现在我需要使用复杂的逻辑和很多要连接的表进行 SQL 查询。最好和最快的方法是编写一个原始 SQL 并将其放入某种getSomeComplexLogicData方法中。

问题是,我把这个方法放在哪里?将它放在我调用它的控制器中是一个好习惯(它极不可能在其他任何地方重复使用),还是应该将它放在它最对应的某个模型类中?

4

2 回答 2

4

Yii 的“模型”不强制扩展CActiveRecord

您可以创建一个简单的域对象,其中包含代码中某些结构的业务逻辑,并为该结构具有单独的映射器,其中包含复杂的 SQL 查询。

您应该尽量避免将所有内容集中在一个类中,因为您最终会违反SRP,这是活动记录模式通常被认为是有害的主要原因之一(当然,也有一些例外)。它将机器人域逻辑和存储逻辑结合在单个类上,从而使其难以测试和维护。


如果您使用的是正确的 MVC 或受 MVC 启发的设计模式,则不会有“模型”。模型应该是一个层。不是类或对象。而且您不应该将任何域业务逻辑暴露给控制器。

于 2012-09-27T15:13:24.080 回答
2

1)您可以将此方法放入 components/Controller.php 以便您可以将此方法用于您的每个应用程序控制器。

2)最好的方法是制作自己的组件。您可以从控制器、模型、视图中调用您的组件。

Yii::app()->yourcomponentname->methodname

学习如何制作组件的链接:http ://www.yiiframework.com/wiki/187/how-to-write-a-simple-application-component/

于 2012-09-27T14:19:37.880 回答