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