`

世上没有B/S系统,只有B系统和S系统.

阅读更多
先说些与标题貌似无关的话.

随着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代码的,那么他将是愚蠢的,幸好他们没那么,但是现在的他离愚蠢也不远.


这篇文章同样比较凌乱,也不知道我说明白我想说的没.

其实我只是想告诉大家(主要是新手),应该站在服务的角度来看待系统的层次和结构,
每一层只是向其他层提供服务,并享用其他人的服务,而无权干涩别人提供的服务的细节,也不应该让别人干涉自己.
有了这样的认识,如何传递数据,如何做到系统层次件的解耦就是很自然的事情了.

当然本着"世事没有绝对,凡事都有例外"的原则,我这些观点不适用于所有系统.



以上观点只代表我个人看法(当然有一些观点不是我首创),欢迎大家提出反对意见.
分享到:
评论
122 楼 yuan 2008-06-27  
《Expert One-On-One J2EE Development Without EJB》这本书上说
Rod Johnson 写道

J2EE开发者们中间有一种根深蒂固的认识:业务对象和web层应该在物理上分开;我认为这纯属谬见,危害极大、代价极高。


这和fins的观点有没有冲突?

我理解中的fins的观点就是把B/S程序给C/S化了,一些“表示逻辑”本是由服务端(<%%>的Java脚本,或者是一些tag)完成的,现在移到了客户端。
121 楼 norwolfli 2008-06-20  
基本上理解了楼主的意思:既然有jsp可用了,就不要在servlet里out.print("<html>");了,甚至可以理解jsp相当于B,servlet相当于S。B和S要严格分离。
120 楼 kj243341578 2008-06-20  
对  说的很好
  顶
119 楼 悠游键客 2008-06-20  
同意楼主的意见,每一层有每一层提供的服务,而这个服务不应该干涉别人怎么使用。
偶也很讨厌通过服务器端向客户端输入HTML和JS代码
118 楼 javaboy2006 2008-06-19  
fins 写道

但我还是要补充一句: 我虽然曾大量是使用和开发tag,但我对它是非常厌恶的,
使用上也许还比较愉快,但是开发起来真够恶心的.我讨厌一切在服务器端生成html代码的行为.

深有体会,写多了tag代码后看着头晕。所以在写JavaWeb应用的时候,.jsp页面中坚决不出现<%%>服务器端代码,Servlet中也不出现类似:out.print("<table><tr><td>hello world!</td></tr><table/>");代码。B端就做B端自己的事情,S端就做S端自己的事情,互不越界。不过jsp页面最后还是被转换成Servlet然后编译成.class文件,别人本来就叫Java Server Page嘛,干脆用模板把页面静态化吧。我的理解就是按照MVC模式来开发。
117 楼 Rainbamboo 2008-06-19  
那可以了,页面中的<body></body>是空的,然后全部使用请求过来的数据来填充貌似最理想的一种做法,关键是做到的又有多少?
116 楼 javaeye26b 2008-06-02  
B/S指的是BROWSER与SERVER,相对于以往的C/S系统,区别在于BROWSER是一个更稳定的CLIENT。它通过以时间换空间的手段换来CLIENT端的稳定或者说一致性,是传统C/S系统中的面向服务思想上的更上一层楼。不知道有没有想过,那么在这一层上的上面,还会不会有新的一层呢。我认为有。那就是操作系统在客户端的消失。因为现在的浏览器仍然是基于OS的。要知道,除了上面所提到的,OS概念本身就在一步步淡化。最初的OS是相对于裸机而言的。但是现在的OS明显已经一步步离那个概念越来越远。进程,内存管理,或者说IE(这个已经变成OS的一部分,应该没有人反对吧),等所有并非直接访问硬件的代码都带有非OS的味道。扯远了,下面回到主题。。。

这样一来,懒人最终将获得成功,不懒的人也最终将获得成功。大家都成功了,这个世界当然会变得更美好。

从这个角度考虑的话,未来的SERVER要承担的任务会越来越重。楼主所提的B系统与S系统其实就是SERVER上面的两个子系统。一个是派出去做外合的,一个是留下来做内应的。其间提到的DWR的问题,其实就是一个解耦的问题。耦合的问题大家都知道,有好处,有坏处。关键在于两个系统之间的关系是什么样的。
比方说,你肯定不希望你跟车之间的耦合太紧,因为有时候你还是需要离开它一下,或者它有时候还是会需要离开你一下。但你在任何时候都不会希望钱离你太远!


115 楼 tangchaodong 2008-06-01  
LZ在追求理想,老板在追求利润!哈哈
114 楼 Andy_Fay 2008-04-19  
太长了
看了一下,其实很简单
只传递数据,不传递行为
113 楼 Ben.Sin 2008-04-13  
好文,同意楼主的观点

就比如你去餐厅吃饭,你可以点一份5成或者7成熟的牛扒
但餐厅不会答应你,假如你点的菜色是红烧的水煮鱼
112 楼 kerne 2007-12-11  
fins 写道
pikachu 写道
楼主的意思就是,两个系统之间,传递的就应该是VO,不管这个VO是java的,xml的还是json的.
强烈鄙视楼主的标题!!


我的标题绝对不是标题党,只是比较"写意",

我只是建议大家先在主观上把你要设计的B/S系统 看作是对两个异构系统B 和 S的融合,
只有这样才能设计出更好的 松耦合b/s系统.


而让他们松耦合,就要先从彼此传递的数据入手, 如果传递的总是对方的代码片段,让对方去执行,这样的做法就很可怕,我主要反对的就是这种做法.


如果要这样说的话,LZ是否说得不清楚?而在别人提问后,LZ才明白自己所以表达的观点?
我支持pikachu的说法,主要是LZ的标题让大家产生了问题并且观点表示不明确。
其实S端就是s端,B端就是B端,不要把业务搞到B端去,不要把B端不美观的东西搞到S端去。
就这么简单
111 楼 bellstar 2007-12-11  
虽然自己也一直推崇把前台做成不针对某种后台的可易构的客户端,但却没有深入的想到楼主所说的B系统和S系统的看法,非常感激。
110 楼 chenjf2k 2007-11-30  
对于习惯javascript编程的我,对楼主的这篇文章非常认同,非常的佩服
109 楼 hred 2007-11-23  
从REST的角度看

B就是负责呈现数据,传送对数据的操作的平台。

S就是一系列的定义良好的资源。(资源某种程度上跟WebService有所重合)

B应该做甚么,S应该做甚么,都应明确规定,这样避免许多设计上的胶合代码(传递,调用,匹配,别名诸如此类)。系统生命期才能更长。
108 楼 cowskin 2007-11-21  
分久必和,合久必分。
没有绝对的!适应才是硬道理!
107 楼 12True 2007-11-16  
abo 写道
12True 写道
完完整整的看完了,蛮喜欢Javaeye的这种氛围

你不觉得这地方博士太多,专家过少?

至少有一些能写出些东西
能让我停留一两小时
106 楼 protti 2007-10-26  
renavatio 写道
抛出异常的爱 写道
flyromza 写道
我很认同楼主的观点,server除了完成自身的逻辑之外,最多也就是为不同的client多做一些数据策略罢了(JSON、XML。。。)

虽然AJAX存在三种交互模式:数据、内容和行为,但我认为在80%+的情况下应该尽可能的使用数据交互,而内容交互与行为交互总是需要server端做一些“本该client端完成的事情”。试想,如果是这种设计逻辑,那么分层还有什么意义?关注分离还有什么意义?


分离在一开始是由于网络不稳定与传输速度的限至
现在这种限至还存在
但越来越小。
忠有一天B/S会变回C/S去的


赞同,网速上去了,基本上就没有必要B/S了。


我一直感觉 给机器里塞太多东西是个很蠢的办法   也许以后没有C/S了  都是B/S呢   因为机器里不需要硬盘了也说不定  一起都在服务器处理   只需要一个薄薄的屏幕看结果就好了
105 楼 caoyi1983 2007-10-25  
JSP,不只可以生成HTML,也可以生成XML,我想这就是AJAX里的X提示我们的,M交给S(通过JSP),V和C交给B(通过js).
104 楼 abo 2007-10-23  
12True 写道
完完整整的看完了,蛮喜欢Javaeye的这种氛围

你不觉得这地方博士太多,专家过少?
103 楼 s_jd 2007-10-22  
好,不错

相关推荐

    2013逻辑学试题(卷)B.doc

    3. A、B、C的关系涉及到部分包含和排斥,需要通过三个圆圈的相交和非相交部分来表示。 **推理的逻辑形式及正确性**: 1. 这个推理涉及到工人与施工现场知识的关联,需要分析具体的逻辑形式并检验是否符合有效的推理...

    B级考试句型

    根据给定的信息,我们可以从不同角度来探讨与“B级考试句型”相关的知识点,主要集中在英语句型、表达方式以及如何运用这些句型来更好地准备全国英语B级考试。 ### 一、句型理解与应用 #### 1. 描述问题及关注点 ...

    人教新课标七年级上语文第六单元同步测试精选.doc

    街市上陈列的一些物品,定然是世上没有的珍奇。你看,那浅浅的天河,定然是不甚宽广。那隔着河的牛郎织女,定能够骑着牛儿来往。 - ③月光淡淡,笼罩着村外的松林。白云团团,漏出了几点疏星。 - ④夜色加浓,苍穹...

    山东省龙口市2020学年七年级英语下学期期中试题(五四制).doc

    11. **such和so的用法**:`He’s very happy to get ______ interesting book.` `such`修饰名词短语,`so`修饰形容词或副词。`an interesting book`是名词短语,所以用`such`,答案是`B`。 12. **条件状语从句的...

    五年级语文上册 第4单元 测试卷2 新人教版-新人教版小学五年级上册语文试题.doc

    6. 名言警句:第六题涉及了名言警句的记忆和应用,如"世上无难事,只怕有心人",这有助于学生积累语言素材和提升人文素养。 7. 关联词运用:第七题让学生填入适当的关联词,如"不但...而且...","虽然...但是...",...

    统编版语文五年级期末测试卷5.doc

    8. 名言警句应用:选择合适的名言进行劝导,如"世上无难事,只怕有心人"鼓励面对困难要有毅力和决心。 9. 诗词理解:通过诗词理解寓意,"问渠那得清如许?为有源头活水来"借水之清澈,是因为有源头活水不断注入,比喻...

    助动词的用法口诀.docx

    **有头就用上两格,b,d,h,i,k,l和t。** - **解释**:这些字母上方有突出的部分,因此占据上两格。 - **实例**:“b”、“d”、“h”等字母的头部高出中间格。 **有尾就占下两格,g,p,q,y要记着。** - **解释**:...

    大学 英语 语法练习,

    - 4)世上没有十全十美的人。Translation: Nobody is perfect in the world. - 5)擦去你的眼泪,哭是没有用的。Translation: Wipe away your tears; crying won't help. - 6)多数人已开始认识到,如果要确保...

    部编版2020-2021学年四年级上册期末考试语文试卷-含答案.docx

    例如,引号内的句子应该正确使用逗号和冒号,如选项B中"我,"第二粒豌豆说:"我将直接飞进太阳里去。"这里的逗号使用错误,应该是"我",第二粒豌豆说,“我将直接飞进太阳里去。” 5. 破折号的作用:破折号可以表示...

    八年级语文下册《竹溪记》同步练习 苏教版.doc

    - 绝无声色臭味可好(jué wú shēng sè xiù wèi kě hǎo):没有任何声音、颜色、气味值得喜爱。 - 孑孑然(jié jié rán):孤单的样子。 - 蓊然(wěng rán):茂盛的样子。 - 裘马(qiú mǎ):穿...

    九年级英语上册Unit5LookintoScienceLesson30ScienceAffectsUs课时训练新版冀教版

    - 没有科学的发展,我们的生活肯定是不同的。Our lives would certainly be very different without scientific development. - 科学发现正使我们的生活越来越好。Scientific discoveries are making our lives ...

    河北省廊坊市三年级语文上学期 期中测试卷 冀教版.doc

    这部分要求学生识别并组词,如“瓣”和“辩”,“钓”和“钩”,“苍”和“抢”,“郊”和“察”,“衔”和“街”,“墓”和“腹”,“脊”和“暮”,“复”和“背”,以及“调”和“朝”,“参”和“系”,“shēn...

    二年级期末语文考试试题(卷)(全国通用).doc

    - 选择正确读音:这部分要求学生识别并选择汉字的正确读音,如"扫地"的正确读音是"sǎo dì","附近"的正确读音是"fù jìn","激起"的正确读音是"jī qǐ","挨着"的正确读音是"āi zhe","播种"的正确读音是"bō ...

Global site tag (gtag.js) - Google Analytics