没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|其它|编辑:郝浩|2007-09-26 10:50:47.000|阅读 880 次
概述:
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
随着 prototype DWR 等 ajax 框架的流行,服务器端生成 js 代码返回客户端,由客户端调用(直接调用或 eval)似乎已经成为了一种很正常的做法(是否流行我不知道)。
这种做法(其实是一种设计)本身无可厚非,但是常常被人错误的理解和应用(此处所谓的"错误"是基于我的立场,也许更多的人会认为我的观点才是错的 呵呵)。
用过 DWR 的人都知道,实际上 DWR 传给客户端的 JS 并不是包含了很复杂的业务逻辑和表现逻辑,他只不过是向客户端发送了一些信息,这些信息告诉了客户端如何调用服务端暴露出的服务。这些信息本质上只是一些数据,确切的说只是一些参数。DWR 实现的 web remoting,只是对下面这种做法的一个变种。
代码
1. ajax.request("service 对应的 url","service 需要的参数","service 调用结束后要做的事情")
DWR 传过来的 JS,实际上的只是扮演着"service 对应的 url","service 需要的参数","service 调用结束后要做的事情"这些参数所扮演的角色。对于真正的业务逻辑还是包含在服务端的 service 里。
所以我不止一次的说过"没什么事情是必须要用 DWR 那种方式来做,而用 prototype + servlet 做不了或是做起来很困难的"。因为两者都能够做到而且也都正做着同样的事情。
但是 DWR 的这种做法有时候会产生一些不良暗示:服务端生成 js 供客户端调用是一件很不错的事。甚至容易让人把这种做法和 JSF 的事件机制混为一谈。于是通过 ajax 请求返回的信息变得丰富多彩。其中最可怕的就是返回复杂的HTML和JS脚本。
现在还有一种可怕的事情是客户端提交 js 脚本,服务端用 rhino 运行(我曾就就做过这种可怕的事呵呵,但是那个系统尤其客观性,不过其实完全可以避免的,只是当时懒了)。
在一个 ajax 的请求与响应中,服务端与客户端交互的信息应该只是作为数据载体的字符串(xml json序列等)。这些数据会告诉对方要去做什么,以及为对方提供必要的参数,而不应该包含告诉对方怎么做。传递 js 语句也可以,但是这些 js 语句一定要是能够和 json 划等号的,任何夹杂了 if for = 等操作的 js 都是应该极力避免的。
在服务器端生成 HTML 的做法实在是为了照顾羸弱的浏览器而做出的让步,其实这种做法本身完全是个错误,不过在相当长一段时间内,我们还将继续错下去。
当然我这里说的完全是 ajax 相关的东西,JSP、tag 不在讨论范畴之内,但我还是要补充一句:我虽然曾大量是使用和开发 tag,但我对它是非常厌恶的,使用上也许还比较愉快,但是开发起来真够恶心的。我讨厌一切在服务器端生成 html 代码的行为。关于 tag 这是另外一个很大的话题了,以前在 javaeye 上的相关讨论并不少,在这里就不再多废话了。
好了,现在该说些和标题有关的东西了(晕)。我先问几个问题:当你要整合两个分别使用 j2ee 和 php 编写的系统时,当你要在一个 j2ee 系统中使用 php 系统中的一部分功能时,当你要从一个 j2ee 系统向另一个.net 系统中传递数据时,你会怎么做?会变态的用 java 重写另外一个系统?会更变态的将 j2ee 系统用 php/.net 重写吗?会用 j2ee 生成 php/.net 可以理解的代码,让对方运行吗?
不会的,你首先想到的会是 WS,会是 MQ,会是 REST,会是 SOA.....
其实服务端与客户端就是两个独立的系统,而且是两个独立的异构系统。处理他们之间的关系和处理两个大型的异构系统的关系非常类似,应该咬住"服务"二字不放,所谓"服务"应该是:生产者提供,消费者享用.而不是:你告诉我我每一步要怎样做,然后我再一步步的做给你看。这不叫服务,这叫"奴役"。任何企图在一端生成另一端代码的做法都是欠妥当的。
因为世上没有 B/S 系统,只有 B 系统和 S 系统。
多说一句,GWT 如果设计成是在运行期生成最终 html/js 代码的,那么他将是愚蠢的,幸好他们没那么,但是现在的他离愚蠢也不远。
这篇文章同样比较凌乱,也不知道我说明白我想说的没。其实我只是想告诉大家(主要是新手),应该站在服务的角度来看待系统的层次和结构,每一层只是向其他层提供服务,并享用其他人的服务,而无权干涩别人提供的服务的细节,也不应该让别人干涉自己。有了这样的认识,如何传递数据,如何做到系统层次件的解耦就是很自然的事情了。
当然本着"世事没有绝对,凡事都有例外"的原则,我这些观点不适用于所有系统。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
文章转载自:csdn接DevExpress原厂商通知,将于近日上调旗下产品授权价格,现在下单客户可享受优惠报价!
面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号