为了回答你的标题问题,我是这样向我解释的:
控制器是路由器,它接收传入请求,将它们与一些业务逻辑(包括获取数据)和一些渲染方法配对,然后将它们吐出队列。将其视为邮件分拣机或其他东西:“这是一个地址,这是一个垃圾箱”。
这个观点应该是愚蠢的。它应该获取数据并将其填充到插槽中,并且可能对表进行一些循环,并且可能包括一些其他视图,但仅此而已。渲染 HTML。更好的是“呈现”XML 或 JSON 输出的“视图”,或者只是将原始数据返回给客户端。 (所有视图)
模型是棘手的部分,因为这是处理传入数据或来自数据库的结果的地方。所以这里可能有很多“层”,你实际上可能会进行很多嵌套调用。您将在此处验证健全性检查之外的输入(并在发生故障时将适当的运营商消息返回给控制器),在此处您将在存储之前进行预处理,并对从数据库中输出的内容进行后处理。这就是逻辑所在。
事情是这样的:我们不再单一地做事情,我们称之为我们想要发生的事情。因此,通过调用特定的控制器,您已经在语义上指定了一些信息(看看为什么他们将其称为语义网,因为这个)。
所以我们可以让控制器变得更愚蠢(调用者知道意图)。我们可以让模型变得更加愚蠢(它为控制器处理特定的业务逻辑和存储)。而且观点总是愚蠢的。
这并不是说单个模型类不能很大。但是单个控制器应该调用的部分应该是狭窄的。
对于您的其他要求:
在 MVC(至少是 spring)中,控制器将视图与模型绑定。这是最好的方法吗?如果我单独维护一个单独的配置来描述哪个视图绑定到哪个模型,并且控制器仅路由到视图,该怎么办?这是错误的而不是MVC吗?
参见上文,我想我已经涵盖了这一点。控制器被请求根据您语义上的需要做某件事。控制器不是一个整体的 switch 语句,因此不需要在其中进行大量配置。
在 Node.js 中表示视图的好方法是什么?由于它很大程度上基于模板,因此提供哪些模板选项(成熟的选项)?
“代表一种观点”?嗯,视图引擎自己进行匹配。您真的想编写自己的视图引擎吗?可以办到。标记一个视图文件,找到“控制动词”(由于缺乏更好的名称,我确信他们有一个),在那里插入数据,然后将整个标记化结构呈现为字符串(HTML 本质上是一个字符串,没有?)。简而言之,这就是我所得到的一切。我的建议是,让视图人员做视图工作,不需要全部重写。
如果我加载一个要静态提供的文件(例如 CSS 文件,通过文件读取到内存中加载),并且保留对全局/应用程序范围中的内容的引用,则可以直接从内存中提供后续请求,从而导致惊人的结果速度,这个假设正确吗?事实上,我们可以保证,在第一个请求进入节点服务器后(这将触发文件读取并将内容加载到内存中),所有后续请求都将从内存中提供服务(对于此类静态内容)。
这是一个正确的假设。这就是我要做的,使用一般的垃圾收集例程每隔几分钟检查一次并粉碎任何早于 n 分钟的文件,然后根据后续请求重新加载,确保您获得相对较新的文件。但这实际上就是缓存代理所做的事情,所以是的,这是完全可以接受的。
在原始 Node.js 中获取 POST 数据的低级(无框架)方法是什么?
你不知道。 Node 会为你做这件事。它已经出现在请求对象中。