使用Laravel PHP框架,我想知道资源控制器的设计,在那里为单个实体定义一个新的控制器,比如“project”或“article”,然后根据不同的CRUD提供方法操作。
在我的应用程序的上下文中,我觉得通过为每个CRUD操作本身设置一个控制器来获得更多实用性 - 比如说,“UploadController” - 然后负责为每个需要它的实体处理该操作。这允许我在类似实体之间共享诸如验证之类的任务,并且我不必为不需要它们的实体包括操作(例如,更新)。它还允许我为单个控制器调用我一次创建多种不同类型实体的页面,例如从一个表单生成项目层次结构,例如project-> subproject-> article。
但是我错过了一些巨大的劣势吗?为什么控制器=实体& method = verb 结构如此受欢迎,vs controller = verb&方法=实体
答案 0 :(得分:3)
你可以,但我不推荐它。
面向对象编程的一个主要“特性”是封装。这意味着每个对象都应该能够访问尽可能少且最具体的变量,并且不应该直接访问与其无直接关系的数据。
此外,面向对象编程意味着易于维护,即使是那些没有设计应用程序的人也是如此。
执行“基于动词的”控制器会导致对象管理文章数据,教程数据,成员数据,评论数据等......这将是一个混乱,并且在“对象”设计中没有任何意义
特别是对于Laravel,你有一个逐个实体类型(用于ORM等等),按实体类型设置一个控制器是合乎逻辑的。
路由也对应于基于实体的系统:您有/posts/create
和/comments/edit/42
,而不是/create/posts
或/edit/comments/42
。
从纯粹的“美学”观点来看,我宁愿选择30个控制器,使用4种方法而不是4种控制器,使用30种方法。更容易阅读,更容易维护。