我想知道控制器从哪里获取用户输入(用于提供模型)。由于输入媒体与用户密切相关,因此视图不应该知道获取用户数据的具体方法吗?但是,如何将控制器与视图分开呢?是否可以根据目的建议使两者完全相互独立?

示例: 当我有一个为视图使用curses库的应用程序时,它暗示它只能通过终端访问。使用curses方法读取控制器中的用户数据会破坏封装,但调用视图上的方法与显示模型无关。

有帮助吗?

解决方案

考虑让视图和控制器通过观察者模式进行通信。 Controller将自身注册为View的Observer。当用户将数据输入View并按Enter键时,View会解释数据并通知其观察者有可用的数据。然后,Controller可以通过公共方法从View中获取数据。

其他提示

在MVC中,控制器从View获取其用户输入。

我不认为视图实际上与输入数据有很大关系。如果您看到用户直接与控制器通信,我发现MVC更容易可视化。控制器从用户接收数据并发回视图。在许多系统中,视图引擎具有一些有限的更新方式(即文本输入显示在将其发送到控制器之前键入的内容)。但对于任何MVC类型的体系结构,只要它们都能够处理相同的数据,您就可以用任何其他视图替换任何视图。

例如。输入用户名可以在任何支持输入字符串的系统上完成。控制器接受一个字符串,因此可以在Web应用程序,终端应用程序或GUI应用程序中使用。

我认为视图应该在控制器上有一个回调来发送用户输入。在Web体系结构中,通过能够通过http请求将用户输入发送回服务器来提供回调。

在你的情况下,你的ncurse前端应该对控制器组件有某种回调方法来发回用户输入。

那么,

我会尝试更具体地为您服务。为你能看到的ppl提供模糊/抽象的答案,不能掌握这个主题,也无济于事。

MVC - <!> gt;模型视图控制器

有许多MVC的实现,我不知道你的情况,但我会给你一个。

最常见的MVC实现就是这样......

查看<!> lt; - <!> gt;控制器<!> lt; - <!> gt;模型

在网络方案中..

视图将是您的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会对它们进行处理以与模型进行对话,然后保留数据。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top