其实RESTful的架构设计从某一方面来说,也是要解决这样一个问题。
比如,同一个controller很有可能被多种客户端所请求,也同时需要作出不同的响应,比如html,json,xml等等。
我认为controller应该在不同类型请求中保持一致。至于说是不是单纯就直接从数据库拿数据,我觉得是值得商榷的。
但是这样做必然造成一个结果,各种客户端的需求可能是不同的。很有可能某种客户端通过这一次请求是不能完全拿到想要的数据。
矛盾就此产生,是单独再写一个controller返回某种客户端需要的所有数据,还是让客户端发起多次请求来拿到所有他需要的数据。
我倾向于后者, 这样保持后端架构的整洁性和可扩展性。
但是这样做也势必会把一些业务逻辑交给前端(我认为这是一种趋势),同样多次请求也必然会有一定的性能损失。
这是一种选择。只是我更喜欢后者。 :)
2009/10/5 朱涛 Tower Joo <zhutao...@gmail.com>:
http://stackoverflow.com/questions/1516852/client-side-logic-or-server-side-logic/1518641#1518641
Jerry
On Oct 5, 10:40 am, 朱涛 Tower Joo <zhutao.is...@gmail.com> wrote:
> 大家好!
> 在做过几个基于web的项目后, 碰到了一个比较难把握的问题: *在实现同一个功能时, 我们应该选择服务器端逻辑还是客户端的逻辑?*
> *
> *
> *举个简单的例子:*
> *功能: 我现在想动态地显示一个页面*
> *方案1: 服务器端的逻辑: 从数据库里取出数据使用服务器端代码(PHP,python)来生成格式化后的页面,返回给客户端,
> 然后客户端直接显示.(所谓的more server side logic, less client side logic)*
> *方案2: 客户端的逻辑: 从数据库里直接取出数据,
> 并不格式化,而是以json或者xml返回给客户端,让客户端的代码(javascript)来格式化,继而显示(所谓的more client side
> logic, less server side logic)*
> *
> *
> *当然上面只是一个简单的例子, 可以推广到各种ajax的动态请求场景.*
> *
> *
> *从用户的角度来看,二者的结果是一致的,但是程序员在处理时却是截然不同的. 所以出现了下面的几个问题:*
>
> 1. 我们应该优先选择哪种?
> 2. 哪种有更好的performance?
> 3. 哪种更user-friendly?
>
> 这个问题, 我同时也在SO上进行了讨论,大家可以参见这里:http://stackoverflow.com/questions/1516852/client-side-logic-or-serve...
>
> 从回答的答案来看, 也没有取得一个统一的结果,主要有下面几个观点
> 支持服务器端逻辑:
>
> 1. 安全性
> 2. 搜索引擎友好
> 3. 有更好的accessibility
> 4. 更好的适应性(无论用户使用的是支持js或者不支持的)
> 5.
> 用户体验的稳定性(由于不知道用户使用的是什么浏览器,也就不能确定js引擎的解析速度,所以可能某些浏览器用户会觉得很友好,而某些会觉得很慢,而使用服务器端则取决于网络)
> 6. 硬件成本的降低(这也是可预期的)
>
> 客户端的逻辑:
>
> 1. 用户友好(不需要refresh,而且通常会有更好的异步处理,所谓的ajax)
> 2. 节省带宽,减少成本(当然传输pure data的json肯定会比格式化好的html节省更多的带宽)
> 3. 扩展性(这点可能比较有争议,但是保持服务器端逻辑的简洁对于扩展性还是很有帮助的)
> 4. 现代浏览器的发展(IE,FF,
> chrome相继宣称自己有更快的js引擎,所以js的解析速度会有大幅度的提升,而且使用老浏览器的用户也是极少的)
>
> 好像是各有道理,那么可能更好的办法是both,于是一个新问题就出来了: *在何种场景下使用何种策略? 在可预期的未来, 哪种方式更要优先考虑呢?*
>
> 我个人的见解是除了下面几种情况外,我都会优先使用客户端的逻辑:
>
> 1. 安全性(如一些验证, 也就是状态更改相关的)
> 2. 特殊人群(可能某些人群具有特殊的属性,如果我们的服务是针对这些人的,可能就要好好权衡)
>
> 希望有经验的朋友能够给出一些比较有说服力并且可操作的方法来(比如应用场景),也请解释下相应的原因.
>
> 谢谢.
> *
> *--
On 10/5/09, victor lee <victor...@gmail.com> wrote:
> 服务器,你把握不了你的用户。
>
> 2009/10/5 四不象 <tabri...@gmail.com>
2009/10/7 Chen GUO <gcd...@gmail.com>: