每页一个控制器还是一个控制器中有多个页面?


16

我只是想要一些有关MVC做事方式的建议。我正在使用codeigniter,我想知道网站的每页有一个控制器还是所有页面有一个控制器更好?

假设我有一个简单的网站,您可以在其中访问主页,登录,创建帐户并与管理员联系。

  1. 拥有以下控制器会更好:frontend(index),登录名,帐户,联系人,或者拥有一个名为frontend的控制器,或者具有诸如login,createAccount,contact之类的动作的任何东西?

  2. 您何时知道在某种情况下使用一个控制器是否更好?


我一直信奉一个信念:一个控制者将它们全部统治,并在黑暗中将它们绑定。(不是真的,但是我喜欢它的声音。:-)
Peter Rowell

Answers:


17

最好每个逻辑单元都有一个控制器,例如AccountController(登录,注册),PagesController(家庭,联系人),Backend-> PagesController(创建,编辑,删除),UsersController(创建,编辑,删除)等等。


您如何用以下区域表示一个网站:主页,登录名,帐户,联系方式。您会像示例一样使用2个控制器吗?如果您转到localhost /,则打开homecontroller,然后如果您转到localhost / contact,从理论上讲,它是否应转到contact controller?后端是什么意思?
Rushino 2011年

这取决于页面的结构以及您拥有多少页面。我将制作HomeController(家庭,联系人)或PagesController(家庭,联系人或details(id))。例如,在ASP.NET MVC中,您具有带有“主页”和“关于”页面的默认HomeController。
圣诞老人

我喜欢这种方法。还有一个ClientController(或任何您想调用的对象),用于通过Jquery.Ajax调用的Action,这些操作并非特定于应用程序的任何特定部分。即可从您的任何视图中重用
Chris

似乎对我来说是正确的答案。CodeIgniter接受控制器的子目录,该目录可将控制器分为多个区域,因此我最终可以使用两个pagecontroller(每个区域一个)。谢谢!
Rushino 2011年

但是,即使它的动作都是相对的,您还是不会最终得到一些较大的Controllers吗?还是没有问题?
Kid Diamond

4

@Rushino您在这里有两个“应用程序”-前端(针对读者)和后端(针对管理员)。对于每组功能,您都有一个控制器。

登录就是这样一个组,其中包括表单HTML的生成(字段,调用视图),以及表单的处理(验证,与模型连接)。因此,“登录”是一个具有两个动作的控制器-generateForm和handleForm。

页面分为仅显示页面的前端应用程序和允许以不同方式编辑,删除,创建甚至可能查看页面的后端应用程序。主页至少在前端是“仅另一页”,因此适合页面控制器。在后端,其逻辑可能足够不同,以至于有理由完全拥有一个不同的控制器。

对于用户-如果用户可以注册自己,则将需要一个前端控制器,但如果没有,则与用户相关的所有工作都将在后端进行。

请注意,每个后端功能可能都需要生成器和处理程序。不过,这些东西可以通过通用表单生成器插件拆分为配置文件。

总而言之,它看起来像这样:

Frontend
  Pages
    View, Handle
  Login
    View, Handle
  Users
    Register (note that the handler can be the same as 'create' on the backend)
  Contact
    View
    Handle

Backend
  Users
    Create, Delete, Edit, Update, View
  Pages
    Create, Delete, Edit, Update, View

等待..您的说法是一个部分代表一个应用程序?有趣的方式(可能还有这种方式)。不知道codeigniter是否这样做吗..将检查。我必须确保您可以在不中断任何会话或连接状态的情况下从一个应用程序转到另一个应用程序。
Rushino 2011年

1
@Rushino CodeIgniter可以这样做-您可以将文件夹放在Controllers目录中。“应用”之间的区别不是在数据库/模型级别,而是在控制器/视图级别。分离的原因是您的后端所做的事情完全不同,通常采用完全不同的设计。它可以提高安全性,因为您可以IP限制整个后端目录。它对开发有帮助,因为您可以在后端上工作而不会影响前端。
Dan Blows

2

我认为您应该为每个业务单位使用一个Controller,例如OrdersController用于与订单等相关的所有操作。我知道在这种情况下,控制器会变得很庞大,但是我们仍然可以使用帮助器类来委托诸如模型初始化之类的事情,并使用分部类来将操作分散到单独的文件中。

例如,我可以让OrdersController Create.cs and OrdersController类的OrdersController List.cs文件每个都有对应的一组动作。使事情变得更加整洁,并且仍将订单操作集中在单个控制器类中。

只是我的2美分。


0

我认为您可以采用其他方法:

一个主控制器作为前门,向特定控制器发送请求。这样,您可以使用此前端控制器来检查常见的事情,例如用户身份验证,谷歌分析和您想做的任何其他常规事情,并保持MVC结构纯净。

这不是我的主意,但Symfony Framework是以这种方式工作的,因此我可以告诉您,根据我的经验,这是实现前端的一种非常不错的方式。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.