Model view controller MVC设计问题-每个组件的角色

Model view controller MVC设计问题-每个组件的角色,model-view-controller,Model View Controller,这是我们第一次使用这个模式(我们甚至不确定这个模式是否适合这个项目),我和我的伙伴们有几个问题。 我们正在设计一个简单的应用程序,用于显示有关权限的文件 假设“Joe”当前已登录到系统,将“Joe”保存为活动用户的正确位置在哪里 在这种情况下,控制器的角色是什么?假设“Joe”想要登录系统。他输入密码并单击登录,视图是否应直接使用模型验证详细信息?还是应该让控制员替他做 假设登录成功,现在该怎么办?视图是否应该作为模型的观察者侦听,等待登录正确的响应,然后切换窗口?或者控制器应该有一个名为boo

这是我们第一次使用这个模式(我们甚至不确定这个模式是否适合这个项目),我和我的伙伴们有几个问题。 我们正在设计一个简单的应用程序,用于显示有关权限的文件

  • 假设“Joe”当前已登录到系统,将“Joe”保存为活动用户的正确位置在哪里
  • 在这种情况下,控制器的角色是什么?假设“Joe”想要登录系统。他输入密码并单击登录,视图是否应直接使用模型验证详细信息?还是应该让控制员替他做

  • 假设登录成功,现在该怎么办?视图是否应该作为模型的观察者侦听,等待登录正确的响应,然后切换窗口?或者控制器应该有一个名为
    boolean ValidateLogin()
    的方法,该方法由视图调用并相应地执行操作


  • 正如您所看到的,我们非常困惑,任何帮助都将不胜感激。

    对于您的需求,我建议您从这个项目开始

    它有一些示例,可以执行基本的身份验证和角色管理

    它还使用.Net成员资格提供程序,这样您就不会重新发明轮子

  • 会话/数据库/配置文件(这是单用户系统还是多用户系统?)
  • 在某些web框架中*:视图将登录数据传递给控制器,传递给将进行验证的模型,将结果返回给控制器,并给出正确的视图作为响应。当然,如果视图希望直接向模型验证数据,也可以,但是IMO视图模型通信不应该涉及任何逻辑,只需要数据更新通知
  • 我认为上面的答案2部分回答了这个问题。控制器应该能够销毁/更改登录视图(当登录成功时,视图通常会相应更改)
  • *这是因为在web应用程序中,通常视图不能直接与模型对话,而在桌面应用程序中则相反。这仍然是一个MVC,只是一个称为MVA的变体

  • 将其存储在会话中
  • 任何客户端验证都可以由视图直接使用模型(通过)完成。对于数据库调用,它通过控制器进行
  • 成功登录后,控制器将呈现相应的视图

  • 这假设OPs对ASP.net MVC感兴趣-我怀疑他们只是对MVC设计模式感兴趣。@halfer抱歉,我没有注意到标签只是MVC。第一个问题可能需要澄清。“保存”是指作为UI操作结果的特定模型操作吗?如果是这样,那就是一个与模型对话的控制器函数。或者,如果您的意思是“将Joe保持为活动用户”,那么这是会话的一项功能,我认为这是控制器的责任。@halfer每个用户在登录时都会显示他有权查看的所有文件。现在,假设模型有一个getFiles(User-User)方法,该方法返回“User”有权查看的文件列表。谁应该提供“用户”?模型是否应该知道活动用户是谁?控制器应该知道活动用户是谁吗?对,明白了:模型绝对不应该知道活动用户是谁。这应该由控制器维护和读取,并提供给模型方法(将其分离有助于单元测试)。您的方法很好:
    getFiles(User-User)
    在模型中意味着必须向它提供
    User
    ——这是控制器的工作。当然,在处理用户安全方面,我也会有所帮助。