我通常为每个逻辑功能组配备一个控制器。通常这将对应于每个模型一个控制器,有时不是。
想象一下,您正在创建一个简单的在线目录,其中显示一个类别列表,然后当用户选择一个类别时,显示该类别的产品列表,以及一个用于CRUD
对类别和产品进行操作的管理面板。我有两个模型(CategoryModel
和ProductModel
)。我有一个为前端生成类别列表的控制器,以及另一个生成产品列表的控制器(例如CategoryController
和ProductController
)。然后我会在后端有一个类别和产品的控制器(AdminCategoryController
和AdminProductController
)。两个后端控制器将处理它们各自模型的列表/添加/编辑/删除/查看操作。如果您考虑您的 URL 结构并将相关函数放在相关 url 上,那么您的控制器结构通常会与您的 URL 结构匹配。事实上,一些框架(例如 CodeIgniter)基于控制器的名称作为默认行为路由请求。
至于控制器中的内容,我认为模型用于数据访问,并包装和隐藏数据库结构。诸如“当状态设置为‘完成’时将当前时间分配给完成日期”之类的逻辑非常适合模型。
视图包含整个演示文稿。控制器/模型不应生成或处理 HTML。2 列或 3 列等决策属于视图。视图中的逻辑应限于生成可见输出所需的逻辑。如果您发现自己想从视图中查询数据库,那么您可能在视图中放入了太多逻辑。
控制器用于剩下的东西。一般来说,这意味着验证输入、将表单数据分配给模型、选择正确的视图并实例化处理请求所需的模型。