调度员+控制器之前的逻辑?

时间:2010-04-11 19:24:35

标签: model-view-controller dispatcher application-design user-management

我相信对于一个典型的MVC Web应用程序,路由器/调度程序例程主要用于根据用户在URL中请求的区域来决定加载哪个控制器。

但是,除了检查url查询字符串之外,我还想使用调度程序检查用户当前是否已登录,以决定加载哪个控制器。例如,如果他们已登录并请求登录页面,则调度员将加载他们的帐户。

但这是一个相当不标准的设计吗?它会以任何方式违反MVC吗?我只是问,因为本周末我读过的例子在调度程序例程之前没有进行过大的计算,并且通常检查用户是否每个控制器都登录,然后在必要时重定向。

但是对我来说,如果您可以首先加载帐户控制器,将登录用户从登录区域重定向到帐户区域似乎很奇怪?

我希望我已经足够清楚地解释了我的惊愕,但是有人可以提供一些关于他们如何处理登录用户和类似会话数据的细节吗?

2 个答案:

答案 0 :(得分:1)

这似乎是公平的要求,可以使用拦截过滤器来实现。可以检查请求标头并将其标记为尝试登录,或标记为恶意尝试。或者,调度员可以将其委托给不同的控制器,该控制器可以执行相同的操作并适当地重定向请求。 MVC是关于应用程序中智能的隔离。这种情况属于完整性检查(技术要求而不是业务要求)。

答案 1 :(得分:1)

我正在使用的当前MVC框架具有预调度和后调度功能。我通常将登录检查放在predispatch进程中,而不是直接将其放入调度程序中。此外,身份验证类可以为您完成工作。