我们看到越来越多的 Web 应用程序在客户端完成。UI 操作、输入预验证(当然不是作为验证的最后手段)、小部件、效果等。
如果一个人决定将域逻辑放在用 Javascript/GWT/其他任何东西编写的客户端怎么办?服务器只提供数据库基础设施。
这听起来可行吗?对这个想法有什么经验、建议或意见吗?
编辑:如果您四处寻找,您会意识到可以编写整个应用程序而无需一行 php/python/java/whatever。
我们看到越来越多的 Web 应用程序在客户端完成。UI 操作、输入预验证(当然不是作为验证的最后手段)、小部件、效果等。
如果一个人决定将域逻辑放在用 Javascript/GWT/其他任何东西编写的客户端怎么办?服务器只提供数据库基础设施。
这听起来可行吗?对这个想法有什么经验、建议或意见吗?
编辑:如果您四处寻找,您会意识到可以编写整个应用程序而无需一行 php/python/java/whatever。
我恭敬地不同意这里的其他海报。事实上,我已经实现了这样一个拼字游戏,几乎完全使用客户端逻辑。事实上,我想做很多事情来使它更加客户端密集。GMail 在客户端做了大量的工作。
但是,出于实际原因,有些事情需要在发球端进行管理。例如,服务器需要给用户一些瓦片,然后用户可以告诉服务器他把这些瓦片放在哪里,服务器需要验证这些槽是空的,因为服务器永远不能完全信任客户端(客户端总是可以被劫持,如果不是通过脚本,那么通过嗅探 HTTP 流量并对其进行修改)。
有很多技术,比如 ADO.NET 数据服务通过 RESTful 接口公开数据库中的 CRUD 操作,以及 CouchDB 直接通过 JavaScript 存储/管理数据对象。此外,像 jQuery 或 Moo Tools 这样的富客户端库确实在推动客户端做更多的事情。
如果你仔细想想,flash 主要是在客户端做所有的 UI 和交互的东西。一些 Adobe Flex 应用程序非常棒。我最近将一个用于谷歌分析,它在客户端呈现图形、旋转和所有这些。服务器只提供数据。即便如此,Google Gears 和 Firefox(我相信是 3.2?)现在也提供客户端存储,这使得断开连接的应用程序场景变得更加有趣。
对于任何公共(和非公共)Web 应用程序,有人尝试检查您的防御措施只是时间问题。JavaScript 验证将是第一个去的。因为您可以在浏览器中禁用它,甚至在使用应用程序时禁用/启用它以获得理想的效果。
实际上,您应该具有三个级别的验证。
UI 验证(可选):首次检查用户输入。无需服务器往返的快速响应-> 用户很高兴 + 您的服务器很高兴您可以将它们从一些无效请求中解放出来。
服务器端验证(必需)。再次进行所有验证+业务逻辑规则。您可能必须访问一些标准或第三方库来检查/验证/做任何您必须做的事情。在这里,您可以实现 BL 级别的数据完整性。
数据库级验证(非常可取)。最后一道防线。通过使用外键/唯一键/等来保证数据完整性。多个并行请求的约束 + 事务级保护突然破坏了您的 BL 级完整性。
如果你想做对,那就应该是这样。
取决于应用程序以及您希望如何使用它和重用代码。
客户端 javascript 确实特定于 Web 浏览器。
域对象和实体可以在其他应用程序(桌面、Web 服务等)中重用
更不用说何时以及如果您的应用程序变得越来越大,下载时间将会越来越长。
当然,任何人都可以立即复制粘贴您的代码并克隆您的应用程序。
这些东西都很好,但请记住,如果有人禁用了 javascript,您需要能够处理它并在您的用户弄乱您的数据库之前验证服务器上的输入。所以你可以把你想要的任何东西放在客户端,但你还需要在服务器端验证它。
在我看来,这不是一个可行的想法。有许多的原因。
总而言之,虽然客户端代码非常适合为用户提供比网页感觉更像应用程序的感觉,但为了网站的安全性和可访问性,需要同时实现这两种技术。
我认为这是不可行的,至少如果您的目标是一致性和速度。将大量逻辑放入说 Javascript 会导致浏览器的大量工作,这意味着一个缓慢的客户端。另外,不要忘记所有浏览器都有它们的小怪癖。
您可以在此处找到有关 Web 应用程序性能分析的精彩摘要:http ://www.websiteoptimization.com/speed/tweak/psychology-web-performance/
简而言之,现代 Web 应用程序为 100 毫秒的性能提升而奋斗。在如此短的时间跨度内,依赖 http 延迟已经是一个问题。因此,很多逻辑都转移到客户端,只是为了减少与用户交互时的 http 调用次数。
有许多可用和正在开发的框架有助于构建复杂的客户端代码。一开始:jQuery (UI)、Dojo、MooTools、Prototype 等——这些更像是一个通用框架,适用于任何类型的客户端逻辑。
更确切地说:
这里有不同框架的全面概述http://codebrief.com/2012/01/the-top-10-javascript-mvc-frameworks-reviewed/