编写大型ajax应用程序的好书或资源是什么?

ege*_*ari 6 javascript architecture ajax resources

我在设计大型系统方面经验丰富,但我对基于ajax的设计仍然相对较新.我知道如何使用apis,并且我很乐意使用jquery和javascript作为一个整体,但我经常发现自己对整体架构的思考太过分了.

现在,我当前的应用程序只是遍布整个地方的javascript文件,都在/ js目录中.他们中的大多数使用jQuery,但有些使用YUI或两者之间的组合,因为jQuery中没有这些功能.

我的一些REST服务器方法接受带有请求参数的普通GET方法,但其他方法需要更复杂的POST来处理传入数据(对象列表列表).由于我正在处理的数据的复杂性,处理我所有的ajax东西是混合和不同方法的混搭.

我真正喜欢的是阅读如何设计一个非常干净和优雅的基于ajax的系统,从最简单到最复杂的情​​况是一致的.这样的资源是否存在?

还有关于javascript文件的命名约定和ajax端点目录/方法名称约定的建议?

还有如何输入表格数据?你应该使用get或post来做这个吗?

当所有约束已经在服务器上时,还要验证表单数据?如何做到这一点非常简单,你不是每个表格都这样做?

当人们点击事物并进行设置时,生成新页面内容的最佳方法是什么,以便一次又一次地轻松完成.

如何处理特定于应用程序的javascript文件相互依赖并妥善管理.

我也使用Spring和Spring-MVC,但我不认为这会产生太大的影响.我的问题纯粹与浏览器有关.

Mic*_*man 6

最后有TL; DR摘要.

我无法真正为你指出一个好的资源,因为我自己找不到一个.但是,一切都不会丢失.您已经拥有开发大型应用程序的经验,并将这些知识应用到浏览器空间中并不需要进行大量的重新思考.

首先,除非您的应用程序非常简单,否则我不会立即开始重构整个代码库,因为肯定会有无用的案例.

首先设计您想要的系统的核心架构.在您的情况下,您可能希望所有AJAX请求都经过一个点.从jQuery或YUI中选择XHR接口,并在其周围编写一个包含选项哈希的包装器.您为新代码编写的所有XHR调用都会在那里进行.这允许您随时使用另一个框架或您自己的框架切换执行XHR调用的框架.

接下来,协调线路协议.我建议使用JSON和POST请求(POST请求对于没有缓存的FORM提交有额外的好处).列出您需要的不同类型的请求/回复.对于每个响应,创建一个JS对象来封装它们.(例如,表单提交响应作为FormReponse对象返回给调用者,该对象具有验证错误的访问函数等).这样的JS开销非常简单,可以轻松更改JSON协议本身,而无需通过窗口小部件代码来更改原始JSON的访问权限.

如果您正在处理许多表单,请确保它们都具有相同的结构,以便您可以使用JS对象来序列化它们.大多数框架似乎都有各种本机功能来执行此操作,但我建议您自己滚动,这样您就不必处理缺点.

此时增加的业务价值当然是零,因为您所拥有的只是一个理智的做事方式的开始,甚至更多的JS代码加载到您的应用程序中.

如果您要编写新代码,请将其写入您刚刚实现的API.这是一个好方法,看看你是不是做了什么愚蠢的事情.暂时保留其他JS,但是一旦你必须修复bug或在那里添加一个功能,重构该代码以使用新的API.随着时间的推移,你会发现重要的代码都在你的API上运行,很多其他东西将慢慢变得过时.

但是,不要过度重新发明轮子.保持这种新结构仅限于数据交互和HTTP线,并使用您的主JS框架来处理与DOM,浏览器怪癖等相关的任何事情.

还要设置全局记录器对象,不要直接使用控制台.让您的记录器对象使用控制台或自定义DOM记录器或您在不同环境中需要的任何东西.这使得构建自定义日志级别,日志过滤器等变得容易.显然,您必须设置构建环境来为生产构建清除该代码(您确实有这样的构建过程,对吧?)

我个人最喜欢的相对理智的JS源代码布局和命名空间是Dojo框架.相对于其命名空间的对象定义与它们在磁盘上的位置有明显的关系,有一个用于自定义构建,第三方模块等的构建系统.Dojo依赖/构建系统依赖于dojo.requiredojo.provide语句.码.在源上运行时,dojo.require语句将触发相关资源的阻塞负载.对于生产,构建系统遵循这些语句并将资源插入到该位置的最终包中.文档有点稀疏,但它绝对是灵感的良好开端.

TL; DR答案是,

  • 让所有XHR呼叫都通过单一界面
  • 不要将原始响应数据传回更高级别
  • 逐步重构现有代码
  • 协调电线协议
  • 使用JS的动态功能构建轻量级代理代码
  • Sane代码结构和调用图在JS中与在其他语言中看起来相同