首页 > 解决方案 > 在 PHP 中的 MVC 之后在另一个控制器中创建控制器的对象是一种好习惯吗?

问题描述

我们(我们大多数人)都知道控制器的工作是处理客户端(例如网络浏览器)发出的请求,获取模型,渲染视图。

我的高级开发人员有 20 年的经验,伴随着原生 PHP 长大,不像我 4 年的经验,伴随着 PHP MVC 框架长大。我看到我的高级开发人员在另一个控制器的操作函数中创建了一个控制器的对象,因为他想使用与以下示例相同的业务逻辑。

class FooController extend Controller {

     public function view($id) {

         // Business logic goes here...

         // Pseudo code
         // If request comes from BarController
         // Render no layout, only view template.


         // If request comes from browser
         // Render view template with layout.
     }
}

class BarController extends Controller {

     public function viewFoo($id) {

          // Create an object of FooController so that we can reuse the business logic of the view function.
          $foo = new FooController();
          $foo_view = $foo->view($id);

          // Render $foo_view template.
     }
}

遵循 MVC 设计模式FooController在另一个控制器(在这种情况下)中创建控制器的对象(在这种情况下)是一种好习惯吗?BarController::viewFoo($id)

标签: phpmodel-view-controllermethodscontroller

解决方案


这种做法在某些情况下可能没问题,但总的来说这是问题的征兆。

根据一些人的说法,可重用的业务逻辑不属于控制器。相反,他们推荐了“胖模型瘦控制器”的一些变体(将这些术语放在互联网搜索引擎中)。控制器应该非常简单,可重用的逻辑应该在模型层,或者在单独的服务层中。

鉴于此,大多数人会认为控制器不会像这样重用。这使得应用程序变得脆弱:想象有人更改了重用的控制器或它呈现的视图:他们不会知道他们必须测试应用程序的这个不相关的部分。


推荐阅读