DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: melqui
今日帖子: 18
在线用户: 21
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 charlesqin (小强) ▲▲△△△ -
普通会员
2021/1/21 23:23:38
标题:
三层的sql到底写在什么地方呢? 浏览:1607
加入我的收藏
楼主: 1、客户端传递sql语句到间层,查询后返回json,客户端再转成数据集?
2、客户端调用服务端方法,并传递查询条件,然后返回数据?
3、想不到其他方法了

1的缺点是sql和服务绑定,程序不好升级,实际上还是2层模式?

2的缺点是每个查询界面都要写个查询方法吗?这样是不是太繁琐了?

望各位大佬指点一下,不胜感激
----------------------------------------------
-
作者:
男 kenliaoliao (ben) ★☆☆☆☆ -
普通会员
2021/1/22 7:54:21
1楼: 你想想B/S模式的,浏览器上的按钮不都是调用后台的服务端的方法吗?
----------------------------------------------
-
作者:
男 vmao (毛小毛) ★☆☆☆☆ -
盒子活跃会员
2021/1/22 8:34:10
2楼: 既然是Delphi,就不要纠结SQL了,直接前台传过去。你逃不脱SQL的魔掌滴。
----------------------------------------------
-
作者:
男 cxg417 (cxg417) ★☆☆☆☆ -
盒子活跃会员
2021/1/22 8:37:10
3楼: 混合运用,简单的查询,就传递SQL到后端,SQL语句最好加密,复杂的业务逻辑,就在后台写脚本
----------------------------------------------
-
作者:
男 charlesqin (小强) ▲▲△△△ -
普通会员
2021/1/22 9:01:47
4楼: 直接传sql的话,感觉客户端和sql绑定太紧了,如果修改sql的话都要升级客户端了,虽然这样也可以,但是总感觉不太完美。

目前主要做windows桌面端,跨平台fmx好用吗? 或者是Lazacus?Lazacus开发方便吗?
或者干脆搞个web版,linux、mac os、手机都可以用?
----------------------------------------------
-
作者:
男 iamdream (银河恒久远,梦想无止境!) ★☆☆☆☆ -
大贡献会员
2021/1/22 10:12:56
5楼: 我觉得怎么方便怎么来,把升级做好就可以。作为一个长期服务的软件,不可能不升级的。当然,如果可以的话,尽量将SQL放服务端。不要为了架构而架构。
如果你实在觉得SQL看着不爽,那用ORM好了,找个现成的框架,SQL语句都不用你写。虽然这样一来就不能享受Delphi的很多福利了。
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2021/1/22 12:24:16
6楼: 三层的程序,按照开发的原则,业务逻辑在中间层。前端仅仅是 UI 层。

UI 层有一些简单的限制用户操作的业务逻辑。

业务逻辑的实现,包括 SQL 语句,应该都放在中间层,也就是服务器端。这样的好处是:
1. 安全;业务逻辑在服务器端,别人不可能远程攻击你修改数据。如果在客户端,比如可以从客户端送 SQL 语句过去,那我写个程序送 SQL 语句过去,就可以实现 SQL 攻击。以前在网页里面用户登录的地方直接写 SQL 语句就可以把服务器上的数据库搞坏这种事情时常发生的。

2. 方便升级。你改了业务逻辑只需要升级服务器端,升级一台机器,无需把所有的客户端都升级。当年 BS 之所以流行,理由之一就是改了代码不用逐个客户端去升级,只要升级服务器就行了。反正客户端就是个浏览器。

3. 模块化。业务逻辑封装成模块,修改、替换也容易。但如果放在客户端,替换就不容易了。
----------------------------------------------
-
作者:
男 iny (盒子) ★☆☆☆☆ -
盒子活跃会员
2021/1/22 14:02:15
7楼: 只有搞Delphi的还在客户端传递SQL!
----------------------------------------------
-
作者:
男 vmao (毛小毛) ★☆☆☆☆ -
盒子活跃会员
2021/1/23 16:20:27
8楼: 应该说搞C/S模式的还在客户端传递SQL,不光Delphi,C#照样传递SQL,因为这样简单,也没啥毛病。传查询SQL select本身不是什么坏事,坏事是把update,delete,insert写在客户端,这样就把逻辑弄前端来了。
我用C#照样前台SQL查询,后台写方法更新,Delphi就没有必要,DELPHI Provider更新更方便,写起来方便是优点,但也是缺点,逻辑绑定在控件里了。
----------------------------------------------
-
作者:
男 inbreak (入侵) ★☆☆☆☆ -
盒子活跃会员
2021/1/24 20:19:59
9楼: 尽量将 SQL语句保存到 数据库了,然后设定一个 ID。

客户端,仅需传递一个 ID号及参数到服务端,然后服务器端做相应处理返回数据集就行了。。。

我就是这样做的。
----------------------------------------------
我是菜鸟,己经搞了十多年了,但是我仍然很菜。
作者:
男 kwer (★★★★★) ★☆☆☆☆ -
普通会员
2021/1/25 8:42:13
10楼: 是谁告诉你这是二选一的选项呢? 为什么非要搞一个三层十八层,二层难道它不香吗? 看看6楼是怎么说的: 安全性,模块化,服务化。 这跟传不传sql有那么纠结吗?
----------------------------------------------
==========-==========-==========-==========-==========
     多隆, 给我备一匹最快的马, 我有事要走先~~~
==========-==========-==========-==========-==========
作者:
男 lr46752881 (Anuo) ★☆☆☆☆ -
普通会员
2021/1/26 16:11:31
11楼: 1 客户端传sql给服务端,伪三层。

2 客户端传ID给服务端,让服务端去检索对应ID的sql,返回数据集,用sql脚本语言去代替delphi语言,优势全没了,服务端基本是摆设。

3 BS结合,delphi的客户端就一个浏览器,然后服务端业务逻辑,UI生成都在服务端上,那还搞delphi干屁~~~~~~~直接java不香吗

4 还有一种类属性做法,叫什么orm框架N+1层之类,数据库的字段生成类属性,然后进行赋值提交,觉得挺牛逼的,结果用到grid表中操作,简直就是废物。
==========
最终解答:
用RTC+在线升级。
客户端:不要处理任何sql,多用ClientDataSet和Rtc结合提交数据
服务器端:处理逻辑,不写复杂sql,遇到复杂sql,拆开用程序语言写。
可以返回结构体,返回数据集,返回数据流。
数据库:永远都不要写触发器,存储过程,他就是用来储存数据的

用delphi的人,不要老想去靠组团开发,就一个人玩的东西。
----------------------------------------------
123
作者:
男 sail2000 (小帆工作室) ★☆☆☆☆ -
盒子活跃会员
2021/2/18 9:25:13
12楼: @iamdream (银河恒久远,梦想无止境!)
题外话:
老哥的长风文本精灵能改到新版本用就好了,一直在用着这个好东西。
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行93.75毫秒 RSS