【问题标题】:CakePHP developer tries out JavaScript MV*. Gets confusedCakePHP 开发人员试用 JavaScript MV*。感到困惑
【发布时间】:2012-12-05 15:38:30
【问题描述】:

我在使用 CakePHP 的服务器端 MVC 应用程序开发方面有几年的经验,并且在使用 vanilla PHP 方面有更多经验。遗憾的是,我不能对 JS 应用说同样的话,尽管我确实有使用 Mootools 为静态页面增添趣味的经验。

所以现在我正在尝试研究客户端应用程序构建,但到目前为止我的成功并没有那么好。由于我接触过的唯一 MVC 是 CakePHP,每个 JS MV* 框架充其量似乎都难以理解。我已经习惯于编写整洁的 CakePHP 和 Mootools 类代码,以至于大块的 JS 代码显得杂乱无章,这完全没有帮助。

我什至尝试通过模仿 CakePHP 来编写我自己的简单的类似 MVC 的库,主要用于学术用途。我想不用说我还没有真正得到它。

我在学习和编写自己的 MVC 时意识到的一些事情:

  • Js 是异步的。 CakePHP 以它的方式工作,因为 PHP 是同步的。在 JS 中,需要以不同方式实现的事情是无穷无尽的,而由于异步,可以以不同方式完成的事情也有很多。服务器端 MVC(或它的 CakePHP 实现)和客户端 MV* 之间最重要的区别是什么?
  • 我仍然不太了解客户端模型的概念。在 Cake 中,它们处理数据验证和数据库连接。另一方面,客户端是一个不安全的环境,所以客户端模型只能做基本的数据过滤、预验证和默认值。我在这里完全错了吗?
  • 某些应用程序需要服务器对应项。 Server 也应该是 MVC 吗?
  • 似乎在客户端 MV* 中您可以同时拥有多个控制器。虽然我有点理解它有它的用途,但我目前的知识太少了,我什至想不出比“它有什么用处?”更好的问题。

我还下载了TodoMVC 并尝试检查不同的框架,但收效甚微。它的主要问题是它只是单页(动作发生在不同的 url,但布局保持不变)并且实现是如此不同,以至于我什至很难理解基础知识,更不用说找到最适合的框架为了我。此外,它不以任何方式与服务器通信,这令人非常失望,因为我想看看不同的框架是如何做到这一点的。

因此,此问题的最佳答案是指向一本书的链接,该书名为Client-side JavaScript MV* For Dummies(仅具有服务器端 MVC 经验),这将使您获得除了常规的 StackOverflow 奖励外,大约 500 个互联网。

我会非常感谢任何关于我漫无边际的书面问题主题的见解(完整链接)。您将获得标准的 +1 奖励,作为进一步的激励,我承诺将您的昵称写在便利贴上,并在下个月将其保留在我的显示器上。回答最有帮助的人当然会得到接受,另外还可以提供一张图片,打印在他们的昵称旁边,附在我的显示器上。

【问题讨论】:

  • 我正在继续我自己的 MVC 项目。我弄清楚了客户端 MVC 的大部分工作原理,尽管模型层对我来说仍然有点模糊,因为直接 db 查询到服务器是不可能的。换句话说,客户端模型与服务器模型的行为如此不同,以至于我很难决定实现的范围应该有多大以及要遵循什么示例。

标签: javascript model-view-controller mvvm mvp


【解决方案1】:

我很想知道你最后在哪里。 PHP 是我的初恋,虽然我仍然喜欢这门语言的易用性,但当它明显被淘汰以寻求更快、更具可扩展性的技术时,我很难真正认真对待它。

您说 javascript 的异步性使事情变得复杂,但它确实为提高性能打开了大门。有相当多的库(更多用于 node.js,而不是客户端工作)旨在使 javascript 编写得好像它是同步的 - 我再次认为它对您当前的问题没有帮助,但很高兴知道其他人分享您的痛苦.

我认为javascript中的MVC可以这样想:

M:模型只是对数据的解释。所以如果你有一个人,你可以说每个人都有一个字符串的名字,一个整数的年龄等等。现在,每当您创建一个新人时,您都可以进行验证。我发现,客户端模型往往非常简单。

V:视图是另一个有趣的东西。有些人喜欢拥有一大组包含 HTML (ew) 字符串的渲染函数。其他人喜欢让视图只是像handlebars.js 这样的模板引擎的包装器(可能是更好的解决方案)。

C:功能与 PHP 中的控制器几乎相同。

我对您的建议是不要自己编写,而是采用 Backbone.js(很快成为行业标准),从内到外学习它,也许在它之上构建。

祝你好运!

【讨论】:

  • 我实际上尝试了一些 js MV* 框架。可悲的是,我无法与他们中的任何一个联系起来。我认为开始我自己的类似 MVC 的框架是一个很棒的决定。这是一次美妙的学习经历,我几乎立即获得了一些宝贵的见解,而在使用其他框架时我不会这么快就学会。我的目标是尽可能地模仿 CakePHP,否则效果很好,但我在组织模型、模型视图和控制器层时碰壁了。目前该项目处于休息状态,但我计划在有更多时间后尽快返回。
  • 如果它可以访问 github,请告诉我!
  • 当然。还有很多事情要做,所以我不会抱太大希望:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-07
  • 1970-01-01
  • 2017-05-06
  • 2014-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多