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

我正在探索不同的MV *模式,并注意到MVP在.Net应用程序中使用非常繁重,但几乎没有其他地方。
似乎整合它的唯一的其他大框架是GWT,但只在某些部分。

  1. 为什么MVP这么微软的东西(为什么它在其他语言中几乎不受欢迎)?
  2. 有没有一个nodejs应用程序/项目使用MVP(最好有源我可以看看)?

谈论它看起来像微软的事情的原因,可以根植于至less两家大公司及其各自框架的devise决策。 微软将MVP整合到.NET中。 苹果在cocoa中select了MVC。

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

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

从那篇文章:

暴乱模型定义您的应用程序。 这是你的业务逻辑暴露在外部世界与一个精心devise的API。 一个完全隔离的,可testing的单元,可以在浏览器和服务器(node.js)中运行。

根据我的经验,请原谅我即将发表的一般性陈述,MVP之所以在这项技术中没有被看到太多,是因为很多人或者没有听说过,忘记过,或者根本看不出太大的差别什么是“控制器”,什么是“演示者”。 这并不意味着没有什么区别,Tero Piirainen在Riot.js文章中为来自其他JavaScript MVC框架的人员概述了相当好的事情。

nodejs中没有MVP的很好的例子。 我们做了一堆研究,并使用nodejs.net的MVP模式实现了TODO应用程序 。

它还不完美,但我认为它填补了一个空白。 拉请求是受欢迎的。

https://github.com/EchoGlobalLogistics/mvp

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

回答你的第一个问题,我会说,MVP并不是所有的微软,甚至维基百科文章指出。 这只是微软的语言devise师们select隐藏小部件实现细节的范例。

当你作为一个用户与一个小部件进行交互时,有很多事情在进行。 在某种程度上,它可能看起来是一个自己的视图和控制器,它自己的业务逻辑模型可以看作是一个小应用程序。 想一下下拉菜单:它有一套方法来在屏幕上实际绘制一些矩形,它也有方法来呈现一个值列表作为文本,当你点击某个项目时,正在改变背景和文本的颜色根据一定的规则去做(想想业务逻辑)。 微软的.Net平台与用户界面有很大关系。 这就是为什么select一个更适合这个目的的范例是非常重要的。

另一方面,Node是一个完全的后端平台,它不是创buildWeb应用程序的框架。 我并不是说你不能或不应该创build一个Web应用程序。 我所说的是,Web应用程序中的节点代码angular色应限制为IO。 获取请求,发送响应,向/从存储器发送/接收数据,可能是parsing。 当然,你可以创build一个框架来在节点之上创buildWeb应用程序。

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

节点可以用来创build一个不同类别的应用程序。 那些将是CLI应用程序。 这是您可以使用MVP创build应用程序并在Node中使用Presenter的位置。 为了寻找例子,我build议看看flatiron web 框架 ,这个框架对创buildcli应用程序有很好的支持,并且还没有这样的应用程序的例子: https : //blog.nodejitsu.com/writing-cli-apps-with-熨斗 。

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

我们最近用expressj来构build一个web应用程序。 在做这件事的时候,我们在快车上build了一个小框架来更好的组织我们的代码。 该框架强制您为GET请求和POST请求的命令分别编写处理程序(Presenters)。 (请参阅martinfowler.com/bliki/CQRS.html)。 该框架还通过仅允许来自命令的redirect来强制后redirect获取模式(en.wikipedia.org/wiki/Post/Redirect/Get)。 npm包是expressmvp( https://www.npmjs.org/package/expressmvp )。

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

如何构build一个express.js应用程序?

ExpressJS如何构build应用程序?

有几个Node的框架以及基于MV *的框架:

  • 斗牛士
  • 新的Sails.js (基于Rails)
  • 大多数节点框架都是build立在Express.js之上的,可以根据上面的解释,将其修改为MV *。

这是一个以MV *时尚纯快车为基础构build的示例应用程序 。