nodejs中的示例Model-View-Presenter应用程序

时间:2013-06-17 14:44:40

标签: .net node.js mvp

我是exploring不同的MV *模式,并注意到{。3}}在.Net应用程序中使用非常多,但几乎没有其他地方。
似乎包含它的唯一其他大框架是GWT,但仅限于某些部分。

  1. 为什么MVP是微软的东西(为什么它在其他语言中不那么受欢迎)?
  2. 是否有使用MVP的nodejs应用程序/项目(最好是我可以查看的源代码)?

5 个答案:

答案 0 :(得分:4)

谈论它看起来像微软的东西的原因,可以根植于至少2家大公司及其各自框架的设计决策。微软将MVP纳入.NET。虽然Apple在Cocoa中选择了MVC。

至于JavaScript,请看一下最近的框架Riot.js https://moot.it/blog/technology/riotjs-the-1kb-mvp-framework.html

虽然它不是特别的“node.js框架”,但它是向“同构JavaScript”(在客户端+服务器上运行JavaScript层)这一术语的一个例子,以及可以通过吸引了许多不同经历和背景的工程师。

从那篇文章:

  

Riot模型定义了您的应用程序。这是您的业务逻辑,通过精心设计的API向外部世界展示。一个完全隔离的可测试单元,可以在浏览器和服务器(node.js)中运行。

根据我的经验,请原谅我即将发表的一般性声明,之所以在这项技术中没有看到MVP的原因是因为很多人要么没有听说过它,要么忘记它,或者根本就看不到与“控制器”是什么以及“演示者”是什么有很大不同。这并不意味着没有区别,Tero Piirainen在Riot.js文章中对来自其他JavaScript MVC框架的人们做了很好的概述。

答案 1 :(得分:1)

nodejs中没有任何伟大的 MVP示例。我们进行了大量研究,并使用nodejs.net中的MVP模式实施了TODO app

它尚未完美,但我认为它填补了空白。欢迎提出拉动请求。

https://github.com/EchoGlobalLogistics/mvp

答案 2 :(得分:0)

绝对有可能以MV *方式使用Node。以下是我在构建应用程序时用作指南的一些非常好的问题/答案:

How to structure a express.js application?

ExpressJS How to structure an application?

Node也有一些基于MV *的框架:

  • Matador
  • 新的Sails.js(基于Rails)
  • 大多数节点框架都建立在Express.js之上,可以适应MV *,如上面的答案所述。

这是一个基于MV *方式的纯粹表达的sample app

答案 3 :(得分:0)

tl; dr 特别是在CLI插件中查看flatiron框架。另外,本文https://blog.nodejitsu.com/writing-cli-apps-with-flatiron及其示例部分。

回答你的第一个问题我会说MVP不是微软的全部,甚至维基百科的文章都说明了这一点。只是微软的语言设计师选择了隐藏小部件实现细节的范例。

当您作为用户与小部件进行交互时,会发生很多事情。在某种程度上,可能看起来小部件本身可以看作是一个小应用程序,它有自己的业务逻辑模型,它有自己的视图和控制器。想象一下下拉列表:它有一组方法可以在屏幕上实际绘制一些矩形,它还有一些方法可以将值列表显示为文本,当您点击某个项目时,会改变背景和文本的颜色根据某些规则(想想业务逻辑)继续发生。微软的.Net平台与用户界面有很大关系。这就是为什么选择一个更适合这个目的的范式非常重要的原因。

另一方面,Node是一个完全后端的平台,它不是用于创建Web应用程序的框架。我不是说你不能或不应该用它来创建一个Web应用程序。我所说的是,Node代码在Web应用程序中的作用应限于IO。获取请求,发送响应,向/从存储发送/接收数据,可能正在解析。您可以创建一个框架,用于在节点之上创建Web应用程序。

在创建Web应用程序时尝试遵循MVP,您可能希望Presenter尽可能接近窗口小部件的实际呈现。对于可能是浏览器的Web应用程序。在这种情况下,节点将扮演REST服务器的角色(或者可以使用任何其他首选的数据交换方式代替REST)。

可以使用Node创建不同类别的应用程序。这些将是CLI应用程序。您可以在此处使用MVP创建应用程序并在节点中使用Presenter。要查看示例,我建议您查看flatiron网络framework,它对创建cli应用程序有很好的支持,并且很少有此类应用的示例:https://blog.nodejitsu.com/writing-cli-apps-with-flatiron

还有https://github.com/mscdex/node-ncurses。这可以让你有机会“推出自己的MVP”。当你的目标是探索这件事时,这是一种很好的做法。

答案 4 :(得分:0)

我们最近使用nodejs with express来构建Web应用程序。在开展工作的过程中,我们在express之上构建了一个小型框架,以便更好地组织我们的代码。该框架强制您为GET请求和POST请求的命令编写单独的处理程序(Presenters)。 (见martinfowler.com/bliki/CQRS.html)。该框架还通过仅允许来自命令的重定向来强制Post-Redirect-Get模式(en.wikipedia.org/wiki/Post/Redirect/Get)。 npm包是expressmvp(https://www.npmjs.org/package/expressmvp)。