2

假设:

  • 我有一个带有 Java 风格 Web 服务器的银行应用程序。
  • 客户端是用 JS 编写的,带有骨干网和一些其他插件。(开发人员是 Angular 的粉丝,但他们没有使用它)。

我的 JavaScript 开发人员来找我说“X 是不可能的,因为我们在浏览器中执行 MVC 的方式。”

现在我可以在服务器端使用 MVC,而且我们已经有了。但是当 JavaScript 人员想要在客户端上拥有一个 MVC 时,感觉就像我们在两个不同的地方保持关于客户体验的状态。我认为将其保存在一个地方更简单。

我熟悉 90 年代的“三层”架构——一个数据库层、一个事务管理层和另一个客户交互层。我们远离了它,因为它太可怕了。

我也熟悉在 Node.js 中运行服务器端应用程序。对我来说 - 在这种情况下拥有服务器端 MVC 是有意义的。

我的问题是:对于基于服务器的应用程序,我需要在浏览器客户端上使用 MVC 模型的原因是什么?

4

4 回答 4

1

由于您在服务器上保留了一个状态,因此我没有收到您关于不在客户端上保留状态的评论。

这是当时的 Hotmail 和 Gmail 之间的区别。Gmail 显然没有在 AngularJs 中实现,但是向前和向后导航、撤消等……没有到服务器的往返是人们从在客户端保持一些相关状态所得到的。

在我看来,两者都有不同的目的。一是便于用户交互。另一个处理持久/受保护状态。

于 2014-10-16T10:49:11.753 回答
0

完全同意 New Dev 的回答。

在服务器中,您以当前登录的用户、数据等形式处理状态。

在客户端中,您的状态将是应用程序状态(它们在哪个“页面”或屏幕上,是列表中当前选定的项目,等等)。

将服务器(如果使用 REST API 实现)视为您的数据库+身份验证,将您的客户端视为桌面应用程序(UI 状态是您正在处理的内容)。这种思维方式在最初使用 Backbone 时确实帮助了我。将您的 SELECT 转换为 collection.fetch,将 INSERT/UPDATE 转换为 model.save(),将 DELETE 转换为 model.destroy()。在 SPA 中,您的 API 是您的数据库,而您的 SQL 是 HTTP 和 JSON - 可能更多,但这样思考可能会有所帮助。

于 2014-10-16T11:12:46.390 回答
0

我为避免 Javascript 奋斗了很长时间,仅仅是因为它不是强类型的。此后我在这一点上退缩了,因为 Javascript 是任何地方最强大的 DOM 语言这一简单事实,而且它还有成千上万的开源框架(只要看看 JQuery,甚至是 Typescript)。

在“每个人都需要一个浏览器”时代之前,服务器端才是王道。我记得哑终端时代。从那时起,当我们现在在每个桌面上都拥有类似大型机的计算能力时,利用客户端 PC 的能力是有意义的。如果我们真的看 MVC,我们会看到一个只做路由的控制器(如果它是客户端做的并不重要?),模型总是最接近数据库,但是......这些天客户端数据绑定为王,您需要客户端可以绑定的模型。模型本身,甚至不再是服务器端,并且使用 JSON 等协议,在客户端创建动态模型很简单,只需解析名称/值对并显示它。我们看到验证转移到客户端(这对用户输入有意义,但客户端也可以验证来自数据库的数据,以显示用户错误。这导致视图的客户端状态机。那么服务器还需要做什么呢?答:开始做,获取数据和保存数据。

当我们看到 Silverlight 甚至 Flash 开始衰退时,这是因为 RIA 事物(服务器端)时代正在被客户端框架所取代。HTML 5 加速了服务器端 RIA 的消亡,因为现在浏览器可以基于标准进行持久的 2 路通信。突然之间,将大部分 MVC 转移到客户端是有意义的。只是它对服务器端的传统主义者来说是陌生的,比如我自己(现在)......

你可以看到 Durandal、Angular、Knockout、Node 等框架只是在重新发明 MVC 和 Binding,只不过这次是客户端。现在真的是学习这些东西的好时机,因为它相对较新。它只会增长,因为所有的基础设施都已经到位。我们瞄准的新系统不再是一个巨大的服务器,而是对巨大的“浏览器”的利用。我们必须将 Web 浏览器视为一个巨大的新系统,因为它们代表了用户和电子商务的一切。我们对操作和提供 DOM 了解得越多,我们的处境就越好……服务器端将永远存在,但它不再是宇宙的中心。

他们预测,未来 10 年,移动设备的普及和对更多应用程序(客户端)的需求如此强烈,以至于开发人员短缺以跟上步伐。对我来说,这就是将齿轮切换到客户端的原因。

于 2014-10-16T11:07:56.940 回答
0

似乎您正在退回到过去的美好时光(不是!),每次点击都需要往返服务器才能工作。它似乎与 Ajax /REST 模型相矛盾。具体来说,它可能适合您的应用程序,但此模型对许多其他应用程序都非常有效。

至于您的问题:客户端 MVC 允许您使用可维护的代码构建丰富的 UI 应用程序。

并且引用维基百科的一句话:早期的 Web MVC 框架采用瘦客户端方法,将几乎整个模型、视图和控制器逻辑放在服务器上。在这种方法中,客户端向控制器发送超链接请求或表单输入,然后从视图接收完整且更新的网页(或其他文档);该模型完全存在于服务器上。 [8] 随着客户端技术的成熟,已经创建了诸如 AngularJS、Ember.js、JavaScriptMVC 和 Backbone 之类的框架,这些框架允许 MVC 组件在客户端上部分执行(另请参阅 AJAX)。

于 2014-10-16T10:47:17.007 回答