我在设计大型系统方面非常有经验,但对于基于ajax的设计来说,我还是个新手。我知道如何使用apis,并且将jquery和javascript作为一个整体使用也相当自如,但我经常发现自己对整体架构的思考太费力了。
现在,我当前的应用程序只有一些javascript文件散布在各处,都在/js目录中。他们中的大多数人使用jQuery,但也有一些人使用YUI或两者之间的组合,因为这些功能在jQuery中不可用。
我的一些REST服务器方法接受带有请求参数的普通GET方法,但其他方法需要更复杂的POST来处理传入的数据(对象列表列表)。由于我要处理的数据非常复杂,所以对所有ajax内容的处理都是不同方法的混合。
我真正想读的是关于如何设计一个基于ajax的系统,它在架构上非常干净和优雅,并且从最简单到最复杂的情况都是一致的。这样的资源是否存在?
还有关于javascript文件的命名约定和ajax端点目录/方法名称的约定的建议吗?
另外,如何输入表单数据?您应该使用get还是post来完成此操作?
当所有约束都已经在服务器上时,还要验证表单数据吗?如何让这件事变得非常简单,这样你就不会对每个表单都这样做了?
什么是最好的方法来生成新的页面内容时,人们点击的东西,并设置它,以便它很容易反复做。
如何处理应用程序特定的javascript文件,以及如何很好地管理这些文件。
我也在使用Spring和Spring-MVC,但我不认为这会有太大的不同。我的问题完全是浏览器相关的。
发布于 2010-12-10 08:21:29
末尾有一个TL;DR摘要。
我真的不能为你提供一个好的资源,因为我自己还没有找到。然而,并不是所有的都失去了。您已经有开发大型应用程序的经验,并且将这些知识带入浏览器领域并不需要太多的重新思考。
首先,除非你的应用程序真的很琐碎,否则我不会马上开始重构整个代码库,因为肯定会有你还没有想到的无穷无尽的情况。
首先设计你想要的系统的核心架构。在您的例子中,您可能希望所有AJAX请求都通过一个点。从jQuery或YUI中选择XHR接口,并在其周围编写一个带有选项散列的包装器。您为新代码编写的所有XHR调用都要经过那里。这允许您随时使用另一个框架或您自己的框架切换执行XHR调用的框架。
下一步,协调有线协议。我推荐使用JSON和POST请求(POST请求对于表单提交有不被缓存的额外好处)。列出您需要的不同类型的请求/响应。对于这些响应中的每一个,创建一个JS对象来封装它们。(例如,表单提交响应作为FormReponse对象返回给调用者,该对象具有用于验证错误的访问器函数,等等)。这方面的JS开销非常小,并且可以轻松地更改JSON协议本身,而无需通过小部件代码来更改对原始JSON的访问。
如果您要处理大量表单,请确保它们都具有相同的结构,以便可以使用JS对象对它们进行序列化。大多数框架似乎都有各种本机函数来实现这一点,但我建议您使用自己的函数,这样就不必处理缺点。
在这一点上,增加的业务价值当然是零,因为你所拥有的只是一个理智的做事方式的开始,甚至还有更多的JS代码要加载到你的应用程序中。
如果您有新的代码要编写,那么就在刚刚实现的API上编写它。这是一个很好的方法来查看你是否真的在做什么愚蠢的事情。暂时保持其他JS的原样,但一旦您必须修复一个bug或在其中添加一个特性,请重构该代码以使用您的新API。随着时间的推移,您会发现重要的代码都在您的API上运行,而许多其他的东西将慢慢过时。
不过,不要过分地重新发明轮子。将这种新结构限制在数据交互和HTTP连接上,并使用主要的JS框架来处理与DOM、浏览器怪癖等相关的任何事情。
另外,设置一个全局记录器对象,不要直接使用控制台。让您的记录器对象在不同的环境中使用控制台或自定义DOM记录器或任何您需要的东西。这使得在自定义日志级别、日志过滤器等中构建变得很容易。显然,您必须设置您的构建环境来擦除生产构建中的代码(您确实有一个构建过程,对吧?)
对于相对合理的JS源代码布局和名称空间,我个人最喜欢的是Dojo框架。相对于它们的命名空间的对象定义与它们在磁盘上的位置有明显的关系,有一个用于定制构建、第三方模块等的构建系统。Dojo依赖/构建系统依赖于代码中的dojo.require和dojo.provide语句。在源代码上运行时,dojo.require语句将触发相关资源的阻塞加载。对于生产环境,构建系统遵循这些语句,并将资源插入到该位置的最终包中。文档有点稀疏,但这绝对是一个很好的灵感开始。
TL;DR的答案是,
< code >H111 JS中的代码结构和调用图在JS中看起来与在其他语言中相同
发布于 2010-12-10 05:54:48
Ajax Patterns是一本非常棒的书/站点:http://ajaxpatterns.org/
否则,您可能想要查看Advanced Ajax Architecture Best Practices
你如何设计你的网站应该基于你的应用程序的功能和大小。我会把你的注意力放在那里,而不是寻找一个适用于所有情况的架构。
https://stackoverflow.com/questions/4403482
复制相似问题