我想知道控制器从哪里获取用户输入(用于提供模型)。由于输入媒体与用户密切相关,因此视图不应该知道获取用户数据的具体方法吗?但是,如何将控制器与视图分开呢?是否可以根据目的建议使两者完全相互独立?
示例: 当我有一个为视图使用curses库的应用程序时,它暗示它只能通过终端访问。使用curses方法读取控制器中的用户数据会破坏封装,但调用视图上的方法与显示模型无关。
答案 0 :(得分:3)
在MVC中,控制器从View获取其用户输入。
答案 1 :(得分:1)
考虑让视图和控制器通过Observer pattern进行通信。 Controller将自身注册为View的Observer。当用户将数据输入View并按Enter键时,View会解释数据并通知其观察者有可用的数据。然后,Controller可以通过公共方法从View中获取数据。
答案 2 :(得分:1)
我不认为视图实际上与输入数据有很大关系。如果您看到用户直接与控制器通信,我发现MVC更容易可视化。控制器从用户接收数据并发回视图。在许多系统中,视图引擎具有一些有限的更新方式(即文本输入显示在将其发送到控制器之前键入的内容)。但对于任何MVC类型的体系结构,只要它们都能够处理相同的数据,您就可以用任何其他视图替换任何视图。
例如。输入用户名可以在任何支持输入字符串的系统上完成。控制器接受一个字符串,因此可以在Web应用程序,终端应用程序或GUI应用程序中使用。
答案 3 :(得分:0)
我认为视图应该在控制器上有一个回调来发送用户输入。在Web体系结构中,通过能够通过http请求将用户输入发送回服务器来提供回调。
在你的情况下,你的ncurse前端应该对控制器组件有某种回调方法来发回用户输入。
答案 4 :(得分:0)
那么,
我会尝试更具体地为您服务。为你能看到的ppl提供模糊/抽象的答案,不能掌握这个主题,也无济于事。
MVC - >模型视图控制器
有许多MVC的实现,我不知道你的情况,但我会给你一个。
最常见的MVC实现就是这样......
view< - >控制器< - >模型
在网络方案中..
视图将是您的HTML页面,数据输入将以表格形式发生。
<form action=/home/createuser method=post>
...code goes here...
</form>
Home将是您的控制器(一个名为home的类),并在home中创建一个方法。
public class Home extends Controller {
public void createUser(Userform f){
...create user...
}
}
此表单将数据作为参数提交到方法中。如果出现这种情况,Createuser会对它们进行处理以与模型进行对话,然后保留数据。