我在设计大型系统方面经验丰富,但我对基于ajax的设计仍然相对较新。我知道如何使用apis,并且我很乐意使用jquery和javascript作为一个整体,但我经常发现自己对整体架构的思考过于沉重。
现在,我当前的应用程序只是遍布整个地方的javascript文件,都在/ js目录中。他们中的大多数使用jQuery,但有些使用YUI或两者之间的组合,因为jQuery中没有这些功能。
我的一些REST服务器方法接受带有请求参数的普通GET方法,但其他方法需要更复杂的POST来处理传入数据(对象列表列表)。由于我正在处理的数据的复杂性,处理我所有的ajax东西是混合和不同方法的混搭。
我真正喜欢的是阅读有关如何设计基于ajax的系统,这种系统在架构上非常干净和优雅,并且从最简单到最复杂的情况都是一致的。这样的资源是否存在?
关于javascript文件的命名约定和ajax端点目录/方法名称约定的建议?
另外如何输入表格数据?你应该使用get或post来做这件事吗?
当服务器上已经存在所有约束时,还要验证表单数据?如何做到这一点非常简单,你不是为每个表单做这个?
当用户点击内容并对其进行设置时,生成新页面内容的最佳方式是什么,以便一次又一次地轻松完成。
如何根据彼此处理特定于应用程序的javascript文件并妥善管理。
我也使用Spring和Spring-MVC,但我不认为这会产生太大的影响。我的问题纯粹与浏览器有关。
答案 0 :(得分:5)
最后有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,浏览器怪癖等相关的任何内容。
还要设置全局记录器对象,不要直接使用 console 。让您的记录器对象使用控制台或自定义DOM记录器或您在不同环境中需要的任何东西。这使得构建自定义日志级别,日志过滤器等变得容易。显然,您必须设置构建环境以清除生产构建的代码(您确实有这样的构建过程,对吗?)
我个人最喜欢的相对理智的JS源代码布局和命名空间是Dojo框架。与其命名空间相关的对象定义与它们在磁盘上的位置有明显的关系,有一个用于自定义构建,第三方模块等的构建系统.Dojo依赖/构建系统依赖于 dojo.require 和代码中的 dojo.provide 语句。在源上运行时, dojo.require 语句将触发相关资源的阻塞负载。对于生产,构建系统遵循这些语句并将资源插入到该位置的最终包中。文档有点稀疏,但它绝对是灵感的良好开端。
TL; DR答案是,
答案 1 :(得分:1)
Ajax Patterns是一本非常棒的书籍/网站:http://ajaxpatterns.org/
否则您可能需要查看Advanced Ajax Architecture Best Practices
如何设计网站应该基于应用的功能和大小。我会把注意力集中在那里,而不是寻找适用于所有情况的架构。