MVC中的节点和一般:如何模型绑看法?(MVC in node and general: How a

2019-07-29 23:23发布

我开始与node.js的和我做一个简单的MVC框架。 到目前为止,我已经有了一个前端控制器(或“调度员”,如果你会)工作。 路由发生通过一个调度配置模块,如图所示。

我的问题是在年底,该代码之后。 此外,这是在学习中的节点,请不要建议express.js和喜欢的练习。

dispatcherConfig.js:

var url = require('url');

(function() {
    var dispatcherConfig = {
        '/'                 : 'homeController',
        '/index.html'       : 'homeController',
        '/sayHello.html'    : 'helloController',
        '404'               : '404Controller'
    };

    module.exports.getController = function(request) {
        var route = url.parse(request.url, true).pathname;
        if(dispatcherConfig[route]) {
            return dispatcherConfig[route];
        }
        return dispatcherConfig['404'];
    }
}());


这是使用dispatcher.js:

var dispatcherConfig = require('./config/dispatcherConfig');

(function() {
    module.exports.dispatch = function(request, response) {
        var requiredController = dispatcherConfig.getController(request);
        var controller = require('./controllers/' + requiredController);
        controller.doService(request, response);
    }
}());


这里是一个样本控制器的样子(工作花花公子太) - homeController.js:
(现在请忽略内嵌视图代码)

(function() {
    var homeController = {
        doService: function(request, response) {
            response.write('<form action="/sayHello.html" method="GET">' + 
                '<input id="name" name="name" size="20" />' + 
                '<input type="submit" value="Submit" />' + 
                '</form>');
        }
    }

    module.exports.doService = function(request, response) {
        return homeController.doService(request, response);
    }
}());


该路由工作得很好。 我有控制器轻松连接最多的URL模式,而且我模仿Spring的多动作控制器类型中,通过进一步检查请求对象。

三件是需要在这里做了明显的事情是:

  1. 创建视图对象
  2. 创建模型对象
  3. 结合视图和模型


问题

  1. 在MVC(弹簧至少),它是结合具有一个模型的视图控制器。 这是做的最好的方法是什么? 如果我保持分开单独的配置描述结合到什么型号什么看法,以及控制器仅路由到一个视图。 这是错的,而不是MVC?

  2. 什么是代表node.js的景色的好办法? 由于它在很大程度上基于模板的,有什么模板选项所提供(成熟的)?

  3. 如果我负载静态送达的文件(比如CSS文件,通过文件加载读入内存),和我一直在全球/应用范围的内容的引用,则后续请求可以直接从内存中提供服务,导致惊人速度,是这个假设是正确的? 事实上,我们可以保证进入节点服务器(这将触发文件中读取的内容被加载到MEM)的第一个请求后,所有后续的请求将被从内存送达(这样的静态内容)。

  4. 什么是原始的Node.js抓住POST数据的低电平(框架少)的方式?

谢谢。

Answer 1:

要回答你的问题的标题,这是我必须给我解释说:

该控制器是路由器,它需要传入请求,对它们与一些业务逻辑(包括取数据),以及一些渲染方法,然后吐出他们背出队列。 把它看成是一个邮件分拣机什么的:“这是地址,有一个BIN”。

该视图被认为是愚蠢的。 它应该把数据和填充入插槽,也许对表做一些循环,也许包括一些其他的看法,但仅此而已。 渲染HTML。 更妙的是“观点”,即“使” XML或JSON输出,或者只是原始数据返回给客户端。 (所有视图)

该模型是棘手的部分,因为这是你处理数据进来,或结果来自数据库。 所以可能会有许多“层”在这里,你可能实际上使许多嵌套调用。 这就是你要去的地方,以验证超出完整性检查输入(并返回合适的载体的信息备份到对失败的控制器),这就是你的存储才去预处理,后处理和什么来从数据库中。 这是逻辑住在哪里。

事情是这样的:我们没有做的事情单片了,我们调用我们打算有发生。 因此,通过调用特定的控制器,你已经指定了一些信息,语义(明白他们为什么把它叫做语义网,因为这个)。

因此,我们有能力使控制器笨(呼叫者知道的意图)。 我们有能力使模型笨(它处理业务逻辑和存储的控制器特定位)。 和视图总是愚蠢的。

这并不是说一个单一的模型类不能是相当大的。 但是,单个控制器应调用部分应该是狭窄的。

为了您的其他要求:

在MVC(弹簧至少),它是结合具有一个模型的视图控制器。 这是做的最好的方法是什么? 如果我保持分开单独的配置描述结合到什么型号什么看法,以及控制器仅路由到一个视图。 这是错的,而不是MVC?

见上面,我想我已经涵盖了这一点。 控制器被要求做基于语义你想要的一件事。 控制器是不是铁板switch语句,所以没有必要有很多的配置发生在其中。

什么是代表node.js的景色的好办法? 由于它在很大程度上基于模板的,有什么模板选项所提供(成熟的)?

“表示的图”? 嗯,视图引擎做匹配了自己。 你真的想编写自己的视图引擎? 可以办到。 令牌化一个viewfile,找到“控制动词”(由于没有一个更好的名字,我敢肯定,他们有一个),有插入数据,然后渲染整个切分结构回来了作为一个字符串(HTML本质上是一个字符串,没有?)。 这就是我得到了一言以蔽之。 我的建议是,让人们做视图工作视图,则无需重写他们。

如果我负载静态送达的文件(比如CSS文件,通过文件加载读入内存),和我一直在全球/应用范围的内容的引用,则后续请求可以直接从内存中提供服务,导致惊人速度,是这个假设是正确的? 事实上,我们可以保证进入节点服务器(这将触发文件中读取的内容被加载到MEM)的第一个请求后,所有后续的请求将被从内存送达(这样的静态内容)。

这是一个正确的假设。 这就是我会做什么,与一般的垃圾收集例行检查每隔几分钟切丝任何文件旧比n分钟,然后重新在后续请求,以确保你得到相对较新的文件。 但是,这是有效的什么缓存代理做的,所以是的,这是完全可以接受的。

什么是原始的Node.js抓住POST数据的低电平(框架少)的方式?

你不知道。 节点可以实现这个要求。 它提出的请求对象了。



Answer 2:

最常用的模板引擎我已经看到了节点所使用的玉和EJS,这主要是因为快递已经内置了对他们的支持。 如果你不打算使用快递,我还会认真考虑胡须(我个人比较喜欢它的理念,以玉/ EJS)。



文章来源: MVC in node and general: How are models tied to views?