先说些与标题貌似无关的话.
随着prototype DWR 等ajax框架的流行,
服务器端生成js代码返回客户端,由客户端调用(直接调用或eval)似乎已经成为了一种很正常的做法(是否流行我不知道).
这种做法(其实是一种设计)本身无可厚非,但是常常被人错误的理解和应用
(此处所谓的"错误"是基于我的立场,也许更多的人会认为我的观点才是错的 呵呵).
用过DWR的人都知道,实际上DWR传给客户端的JS并不是包含了很复杂的业务逻辑和表现逻辑,他只不过是向客户端发送了一些信息,
这些信息告诉了客户端如何调用服务端暴露出的服务.这些信息本质上只是一些数据,确切的说只是一些参数.
DWR实现的web remoting,只是对下面这种做法的一个变种.
- ajax.request("service对应的url","service需要的参数","service调用结束后要做的事情")
DWR传过来的JS,实际上的只是扮演着"service对应的url","service需要的参数","service调用结束后要做的事情"这些参数所扮演的角色.
对于真正的业务逻辑还是包含在服务端的service里.
所以我不止一次的说过"没什么事情是必须要用DWR那种方式来做,而用prototype + servlet做不了或是做起来很困难的".
因为两者都能够做到而且也都正做着同样的事情.
但是DWR的这种做法有时候会产生一些不良暗示:服务端生成js供客户端调用是一件很不错的事.
甚至容易让人把这种做法和JSF的事件机制混为一谈.
于是通过ajax请求返回的信息变得丰富多彩.其中最可怕的就是返回复杂的HTML和JS脚本.
现在还有一种可怕的事情是 客户端提交js脚本,服务端用rhnio运行
(我曾就就做过这种可怕的事 呵呵,但是那个系统尤其客观性,不过其实完全可以避免的,只是当时懒了).
在一个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代码的,那么他将是愚蠢的,幸好他们没那么,但是现在的他离愚蠢也不远.
这篇文章同样比较凌乱,也不知道我说明白我想说的没.
其实我只是想告诉大家(主要是新手),应该站在服务的角度来看待系统的层次和结构,
每一层只是向其他层提供服务,并享用其他人的服务,无权干涉别人提供的服务的细节,也不应该让别人干涉自己.
有了这样的认识,如何传递数据,如何做到系统层次件的解耦就是很自然的事情了.
当然本着"世事没有绝对,凡事都有例外"的原则,我这些观点不适用于所有系统.
以上观点只代表我个人看法(当然有一些观点不是我首创),欢迎大家提出反对意见 :).
原文:http://gocom.primeton.com/modules/newbb/forumtopic16270_8387_66.htm
相关推荐
这些有趣的网址提供了各种各样的在线娱乐和创意工具,让人们在互联网上体验到不同的乐趣和创新。以下是其中一些网站的功能和特点: 1. **http://roxik.com/pictaps/index.html**:这是一个3D画图网站,用户可以创建...
本文档将指导您安装Ubuntu20.04操作系统,并在其上安装ROS(机器人操作系统)和Cartographer(激光SLAM算法),以便实现机器人和SLAM开发。 一、Ubuntu20.04安装 安装Ubuntu20.04操作系统需要至少4GB以上的U盘空间...
在电子技术领域,单片机(Microcontroller)是一种集成度极高的微型计算机,常用于控制各种设备和系统。本项目“单片机程序--世上只有妈妈好音乐播放”是利用单片机来实现简单的音乐播放功能,特别选择了经典歌曲...
《世上没有傻问题》这篇文章强调了好奇心和提问在科学学习中的重要性,特别是对于孩子们的成长和发展。文章指出,孩子们天生具有探索世界的好奇心,他们会提出各种看似简单却深奥的问题,而这些问题恰恰是科学发现的...
世上只有英文版参考.doc
【全国职业院校技能大赛:网络系统管理项目-模块B】主要关注的是Windows系统的部署与管理,这是一项针对职业教育学生的竞赛项目,旨在检验参赛者在实际网络环境中对Windows系统的理解和操作能力。以下是根据样题3...
这个项目名为"51单片机设计喇叭播放世上只有妈妈好keil工程文件C源文件",它展示了如何利用51单片机驱动喇叭或蜂鸣器来播放音乐。Keil C51是专门为51系列单片机编写的嵌入式C语言编译器,它提供了方便的开发环境和...
本文档为系统分析师的3个pdf,主要介绍了信息系统的概述、信息系统工程的概念、信息系统的发展历程、决策支持系统、管理信息系统、企业信息系统的目标和作用、EDP、MIS、DSS的概念和应用、信息化对企业的影响、信息...
世上最稳定的虚拟机系统,此系统能够满足各种服务器。欢迎 大家下载。小白在这里感谢大家了。用过的人都觉得好有,虚拟化能够让一台服务器运行各种系统。解决你多台服务器魂绕。少时诵诗书所所所所所所所所所所所所...
内置2023年度网络系统管理竞赛A和B模块各十套样题
- **IP Log**:通过记录和分析系统的网络流量日志,可以帮助用户更好地理解如何调整系统设置以达到隐藏目的。 2. **\*BSD解决方案**: - **Black Hole**:在某些情况下,可以通过配置防火墙规则将来自特定源的...
3--[已完稿--世上只有妈妈好].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码3--[已完稿--世上只有妈妈好].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码3--[已完稿--世上只有妈妈好].zip源码...
《2022年全国职业院校技能大赛:网络系统管理项目-模块B-样题10》 本篇主要探讨的是2022年全国职业院校技能大赛中的网络系统管理项目,特别是Windows部署这一模块。参赛者需要具备扎实的Windows操作系统知识,包括...
2022年全国职业院校技能大赛:网络系统管理项目-Windows模块
这篇文档标题为“世上只有妈妈好作文”,是一个关于母爱的中文作文,描述部分与标题相同,标签指明这是“范文”。文章通过两个具体事件,展现了母亲对孩子的关爱与无私付出,强调了母爱的伟大。 首先,作者描述了一...
2022年全国职业院校技能大赛:网络系统管理项目-Windows模块
2022年全国职业院校技能大赛:网络系统管理项目-Windows模块
### 2024年广西职业院校技能大赛高职组《应用软件系统开发》赛项样题解析 #### 一、项目背景与意义 党的二十大报告强调了建设制造强国、数字中国的重要性,以及推动制造业向高端化、智能化、绿色化的方向发展。在...
MES系统是智能制造的基础和核心组成部分,它能够覆盖整个生产过程,并与制造企业的各项业务紧密相关联。该系统主要包括以下几个方面: - **制造数据管理**:包括物料清单、工艺路线、产品结构等数据。 - **计划排程...
这强调了了解消费者需求和心理状态在市场营销中的关键作用。 2. 营销策划的重要性:红豆食品有限公司与叶茂中营销策划有限公司的合作,体现了企业在面临市场困境时寻求专业营销策略支持的需求。快速签订协议和执行...