9

我正在探索不同的 MV* 模式,并注意到MVP在 .Net 应用程序中被大量使用,但在其他地方几乎没有。
似乎包含它的唯一其他大型框架是 GWT,但仅在某些部分。

  1. 为什么 MVP 这样一个微软的东西(为什么它在其他语言中没有那么流行)?
  2. 是否有使用 MVP 的 nodejs 应用程序/项目(最好是我可以查看的源代码)?
4

5 回答 5

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 框架的人很好地概述了一些事情。

于 2013-12-08T00:08:17.693 回答
1

nodejs中没有任何很好的 MVP 示例。我们进行了大量研究并使用 MVP 模式实现了TODO 应用程序nodejs.net

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

https://github.com/EchoGlobalLogistics/mvp

于 2013-08-13T03:02:16.280 回答
0

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

如何构建 express.js 应用程序?

ExpressJS 如何构建应用程序?

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

  • 斗牛士
  • 新的Sails.js(基于 Rails)
  • 大多数节点框架都是基于Express.js构建的,可以将其调整为 MV*,如上面的答案中所述。

这是一个基于纯 express 以 MV* 方式构建 的示例应用程序。

于 2013-06-25T15:25:44.543 回答
0

tl;dr查看flatiron框架,尤其是 CLI 插件。还有这篇文章https://blog.nodejitsu.com/writing-cli-apps-with-flatiron及其示例部分。

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

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

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

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

Node 可用于创建不同类别的应用程序。那些将是 CLI 应用程序。在这里,您可以使用 MVP 和 Node.js 中的 Presenter 创建应用程序。要查找示例,我建议查看 flatiron Web框架,该框架对创建 cli 应用程序有很好的支持,并且此类应用程序的示例也很少:https ://blog.nodejitsu.com/writing-cli-apps-with-熨斗

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

于 2013-06-27T12:56:27.950 回答
0

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

于 2014-02-28T09:30:44.673 回答