论坛首页 入门技术论坛

讨论:在浏览器上生成SQL语句可行吗?

浏览 15255 次
该帖已经被评为新手帖
作者 正文
   发表时间:2009-05-31   最后修改:2009-08-26
论坛访问地址: http://www.iteye.com/topic/398794
前言:
虽然本贴有很大的可能变成新手贴与隐藏贴,但我还是想贴出来看看.
--------------------------------------------------------------------------
现在的Web开发,尤其是流行的SSH组合,已经变得越来越复杂,这是不争的事实.
这种开发上的复杂性,在我看来就是前台程序,与后台的数据库,不断封装而加剧了隔离造成的.
如果在程序的前端,能够提供一个javascript的调用接口,可以直接编写SQL命令来操作后台的数据库.(select,update,delete,commit,rollback etc.)
那么数据库就可以直接暴露在用户前端,只要加上一定的用户界面,完全可以将现在后台做的工作移植到前台来做.
这样的话程序结构就简化很多了,而且可以直接抛开Stucts,Spring,Hibernate这些东西配置,管理的复杂性.
当然问题也很多了,安全性,权限,交互等等.
大家说说还有啥局限性,或者说有啥致命的缺陷,使得这种方案是行不通的.
--------------------------------------------------------------------------
   发表时间:2009-05-31  
一个最直接的问题就是你无法重用业务逻辑了。任何页面操作都需要你从头开始写SQL语句,一旦表结构发生微小的变动,你的整个web应用全部需要重写一遍。
0 请登录后投票
   发表时间:2009-05-31  
两个问题:
1.UI与业务逻辑的耦合度增大
2.严重的安全隐患
0 请登录后投票
   发表时间:2009-05-31  
操作难度大、安全隐患严重。动态处理SQL尝试一下我的“仓库猫”框架如何?
0 请登录后投票
   发表时间:2009-05-31  
可以看一下FQL,开源的可以去看源代码。
http://wiki.developers.facebook.com/index.php/FQL

至于是分析内容判断权限,还是直接屏蔽语句执行权限就看需要了。
我曾尝试着使用类似方案解决内容聚合调用时灵活度的问题,不需要给一大堆参数了。
不过只给了select的权限。
0 请登录后投票
   发表时间:2009-05-31  
robbin 写道
一个最直接的问题就是你无法重用业务逻辑了。任何页面操作都需要你从头开始写SQL语句,一旦表结构发生微小的变动,你的整个web应用全部需要重写一遍。


关于业务逻辑重用的问题,我是这么看的.
首先,在一个应用中,能够重用的业务逻辑,在整个系统的所有业务逻辑中,其实比例不大,不会超过10%.对于这10%,可以考虑把逻辑放到后台来实现,以实现重用;其余90%,就直接在前台用SQL来搞定.
第二,在现在的设计中,为了业务逻辑的重用,经常会在各个类之间调用来调用去,一个数据转换来转换去,最后在看程序的时候,很难搞清楚这个业务过程到底访问了那些表,进行了那些实际操作,这种复杂性是否值得,我觉得很多时候需要具体分析才能确定.

对于表结构变化引起的SQL变化,以及页面的重写,我认为这在目前的情况下是无法避免的,无论SQL在那里生成,都是需要改写,并且调试才行的.
但对于在界面上直接写SQL的,可以只修改一个页面就直接看到修改后的效果,而采用SSH及类似方式,数据表修改以后需要修改一大堆东西而能真实看到实际修改修改.效率并不高.
0 请登录后投票
   发表时间:2009-05-31  
那我可以随意改数据库了?
0 请登录后投票
   发表时间:2009-05-31  
laiseeme 写道
那我可以随意改数据库了?

数据库和信息安全确实是一个问题.
在采用SSH开发的时候,这种权限的控制是通过javascript和后台的java代码分两个层次来控制的.
对于这个问题,有两个途径来解决数据访问的权限问题.
1. 把原来在后台用java代码实现的权限控制功能,移植到前台采用javascript来实现,或者采用dwr等方法,在前台调用后台的业务逻辑类来进行判断.
2. 在后台接收SQL语句的地方,编写一个SQL语句的验证类,符合验证规则的通过,发送给数据库;不符合验证规则的,直接退回.
通过这种组合方式来防止对数据库的篡改.具体的实现强度可以根据项目的实际情况来选择.
0 请登录后投票
   发表时间:2009-05-31  
flyspider 写道
两个问题:
1.UI与业务逻辑的耦合度增大
2.严重的安全隐患


重申一下我的思路,UI现在和业务逻辑不仅仅是耦合了,而是直接采用Javascript来编写业务逻辑,业务逻辑大部分在javascript里面调用实现,少部分在后台java实现,通过DWR等方式来调用.
具体到安全隐患,需要细化说明,究竟可能存在那种安全隐患,然后再来讨论究竟有没有解决方案.
0 请登录后投票
   发表时间:2009-05-31  
那你直接考虑下flex吧
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics