草庐IT

javascript - Ajax 架构 - MVC?其他?

coder 2025-01-25 原文

大家好,我正在考虑构建一个 ajax 密集型站点,并且我正尝试花一些时间预先考虑架构。

我正在使用 Code Igniter 和 jquery。我最初的想法是弄清楚如何在 javascript 端复制 MVC,但似乎 M 和 C 并没有太多用武之地。

很多 JS 都是 ajax 调用,但我可以看到它的发展超出了这一点,有大量的 DOM 操作,以及探索 HTML5 客户端数据库。我应该如何考虑构建这些文件?追求 MVC 有意义吗?我应该以某种方式去 jquery 插件路线吗?我不知道如何进行,我希望得到一些提示。谢谢大家!

最佳答案

我制作了一个 MVC 风格的 Javascript 程序。完成 M 和 C。也许我走错了一步,但我最终编写了自己的事件调度程序库。我确保不同层仅使用可以转换为纯 JSON 对象的消息协议(protocol)进行通信(即使我实际上并没有执行该转换步骤)。

所以 jquery 主要存在于 MVC 架构的 V 部分。在 M 和 C 端,我的主要代码可以在 spidermonkey 的独立 CLI 版本中运行,或者在必要时在 javascript 的服务器端 rhino 实现中运行。这样,如果以后需求发生变化,我可以让我的 M 和 C 层在服务器端运行,通过这些 json 消息与浏览器中的 V 端进行通信。不过,只需要对我的消息调度程序进行一些修改即可更改此设置。将来,如果浏览器获得一些点对点风格的技术,例如我可以让不同的层在不同的浏览器中运行。

但是,目前,所有三个层都在一个浏览器中运行。我编写的事件调度程序允许多播消息,因此现在实现撤消功能就像创建一个新对象一样简单,该对象只监听需要撤消的消息。将状态自动保存到服务器是一个类似的操作。我能够在事件调度程序中进行全面详细的调试和分析。我能够准确定义代码的运行方式,以及运行的速度、时间和地点,所有这些都来自代码的核心部分。

当然,我遇到的主要缺点是我没有很好地管理事情的复杂性。为此,如果我要重来,我会非常非常仔细地研究“功能 react ”范式。在 javascript 中有一种现成的范例实现,称为 flapjax。如果不专门使用 flapjax 库,我会确保 View 层遵循该执行模型。 (我不确定 flapjax 本身是否很好地执行了这个想法,但这个想法本身很重要)。

功能 react 的另一个重要实现是 quartz composer,它随苹果的开发者工具免费提供(购买任何 mac 时免费)。如果您可以使用它,请仔细查看它及其工作原理。 (它甚至有一个 javascript 补丁,因此您可以使用预构建的 View 层对您的应用程序进行原型(prototype)设计)

函数式响应式范例的主要收获是确保 View 似乎不会保持任何类型的状态,除了您刚刚给它显示的状态。更具体地说,我从“向屏幕添加一个对象”“从屏幕中删除一个对象”类型的消息开始,现在我更倾向于“显示这个对象列表,我会让您找出从当前显示到我现在要您显示的内容的最有效方法”。这消除了一大堆与草率管理状态有关的错误。

这也解决了我一直遇到的另一个问题,即消息以错误的顺序到达导致的错误。这是一个需要解决的大问题,但您可以通过发送一个大包来绕过它,只需发送一个包含最终所需状态的大包,而不是通过一系列步骤到达那里。

不管怎样,这是我的小吐槽。如果您对我的战时经历有任何其他问题,请告诉我。

关于javascript - Ajax 架构 - MVC?其他?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1216609/

有关javascript - Ajax 架构 - MVC?其他?的更多相关文章

  1. ruby - 其他文件中的 Rake 任务 - 2

    我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时

  2. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  3. jquery - 我的 jquery AJAX POST 请求无需发送 Authenticity Token (Rails) - 2

    rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送

  4. ruby - 调用其他方法的 TDD 方法的正确方法 - 2

    我需要一些关于TDD概念的帮助。假设我有以下代码defexecute(command)casecommandwhen"c"create_new_characterwhen"i"display_inventoryendenddefcreate_new_character#dostufftocreatenewcharacterenddefdisplay_inventory#dostufftodisplayinventoryend现在我不确定要为什么编写单元测试。如果我为execute方法编写单元测试,那不是几乎涵盖了我对create_new_character和display_invent

  5. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

  6. jquery - 如何将 AJAX 变量从 jQuery 传递到他们的 Controller ? - 2

    我有一个电子邮件表格。但是我正在制作一个测试电子邮件表单,用户可以在其中添加一个唯一的电子邮件,并让电子邮件测试将其发送到该特定电子邮件。为了简单起见,我决定让测试电子邮件通过ajax执行,并将整个内容粘贴到另一个电子邮件表单中。我不知道如何将变量从我的HAML发送到我的Controllernew.html.haml-form_tagadmin_email_blast_pathdoSubject%br=text_field_tag'subject',:class=>"mass_email_subject"%brBody%br=text_area_tag'message','',:nam

  7. ruby-on-rails - 使用 javascript 更改数据方法不会更改 ajax 调用用户的什么方法? - 2

    我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的

  8. ruby - Ruby 和 Ruby on Rails 中的三层架构 - 2

    我是一名决定学习Ruby和RubyonRails的ASP.NETMVC开发人员。我已经有所了解并在RoR上创建了一个网站。在ASP.NETMVC上开发,我一直使用三层架构:数据层、业务层和UI(或表示)层。尝试在RubyonRails应用程序中使用这种方法,我发现没有关于它的信息(或者也许我只是找不到它?)。也许有人可以建议我如何在RubyonRails上创建或使用三层架构?附言我使用ruby​​1.9.3和RubyonRails3.2.3。 最佳答案 我建议在制作RoR应用程序时遵循RubyonRails(RoR)风格。Rails

  9. ruby - sinatra 框架的 MVC 模式 - 2

    我想开始使用“Sinatra”框架进行编码,但我找不到该框架的“MVC”模式。是“MVC-Sinatra”模式或框架吗? 最佳答案 您可能想查看Padrino这是一个围绕Sinatra构建的框架,可为您的项目提供更“类似Rails”的感觉,但没有那么多隐藏的魔法。这是使用Sinatra可以做什么的一个很好的例子。虽然如果您需要开始使用这很好,但我个人建议您将它用作学习工具,以对您来说最有意义的方式使用Sinatra构建您自己的应用程序。写一些测试/期望,写一些代码,通过测试-重复:)至于ORM,你还应该结帐Sequel其中(imho

  10. ruby - 在 Mechanize 中使用 JavaScript 单击链接 - 2

    我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan

随机推荐