php - 在 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)
解决方案
这种做法在某些情况下可能没问题,但总的来说这是问题的征兆。
根据一些人的说法,可重用的业务逻辑不属于控制器。相反,他们推荐了“胖模型瘦控制器”的一些变体(将这些术语放在互联网搜索引擎中)。控制器应该非常简单,可重用的逻辑应该在模型层,或者在单独的服务层中。
鉴于此,大多数人会认为控制器不会像这样重用。这使得应用程序变得脆弱:想象有人更改了重用的控制器或它呈现的视图:他们不会知道他们必须测试应用程序的这个不相关的部分。
推荐阅读
- .net - .NET 异步/等待事件去抖动器/节流器
- python - 如何从 python 3 列表中删除所有非数字字符?
- c++ - 依赖子目录兄弟的介子目标
- android - 错误:更改 compilesdk 后包 rx.android.schedulers 不存在
- c++ - 多用户输入 C++
- c++ - 尝试运行已编译的 C++ 代码时出现分段错误 11
- python - 如何使用 matplotlib 动画向 geopandas 绘图添加颜色条
- api - 通过 gitlab api 为樱桃挑选提交的 MR
- javascript - CSS堆叠顺序,变换元素打破绝对兄弟
- javafx - 无法从 DialogPane、JavaFX 的 TextField 输入中读取文本