我可以通过动词来设计控制器吗?如果不是,为什么不呢?

Can I design controllers by verbs? If not, why not?

使用 Laravel PHP 框架,我想知道资源控制器的设计,您可以在其中为单个实体定义新的控制器,例如 "project" 或 "article",然后根据不同的CRUD操作提供方法。

在我的应用程序上下文中,我觉得通过为每个 CRUD 操作本身设置一个控制器(例如 "UploadController" - 然后负责为每个需要的实体处理该操作,我觉得我获得了更多实用性它。这使我可以在类似实体之间共享验证等任务,而且我不必为不需要它们的实体包含操作(例如,更新)。它还允许我为我一次创建许多不同类型的实体的页面调用单个控制器,例如从一个表单生成项目-> 子项目-> 文章等条目的层次结构。

但是我是否遗漏了一些巨大的缺点?为什么 controller=entity & method=verb 结构如此流行,vs controller=verb & method=entity?

可以,但我不推荐。

面向对象编程的主要"features"之一是封装。这意味着每个对象都应该尽可能少地访问最具体的变量,并且不应该直接访问与其没有直接关系的数据。

此外,面向对象的编程意味着易于维护,即使不是您的应用程序设计者也是如此。

做你的 "verb-based" 控制器会导致一个对象管理文章数据、教程数据、会员数据、评论数据等......这会是一团糟,并且在 "object"设计。

特别是 Laravel,你有一个 class 按实体类型(用于 ORM 等),按实体类型也有一个控制器是合乎逻辑的。

路由也对应于基于实体的系统:您有 /posts/create/comments/edit/42,而不是 /create/posts/edit/comments/42

从纯粹的 "aesthetic" 角度来看,我宁愿使用具有 4 个方法的 30 个控制器,也不愿使用具有 30 个方法的 4 个控制器。更容易阅读,更容易维护。