DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: daeung
今日帖子: 24
在线用户: 6
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 dbyoung (dbyoung) ★☆☆☆☆ -
普通会员
2023/6/8 7:35:10
标题:
一个想法,求观点、吐槽 浏览:3766
加入我的收藏
楼主: 一个想法:
  CS 程序中,将各个模块的 DLL 文件放到数据库中。
  运行时,从数据库中下载 DLL 模块到本地执行。
  这样不就实现类似于 BS 的程序效果了吗?
  只不过将浏览器换成了我们的 CS 客户端。
  因为 DLL 模块都放到数据库中去了,
  所以 CS 客户端就是一个 UI 框架而已。
  文件也应该很小。一个文件就可以了。拷贝给客户也方便。
  如果数据库在局域网内,那么就公司内部使用。
  如果数据库在云上,那么就可以联网使用了。
  也可以省略一个公司,一个 CS 端、一个 BS 端,两套程序。

不知道这个想法,有啥问题、弊端没有?
----------------------------------------------
武汉天气不好
作者:
男 shileizi (sl) ★☆☆☆☆ -
普通会员
2023/6/8 8:01:55
1楼: 20年前就这么干了,还是三层模式,不过用的是exe+bpl的模式
----------------------------------------------
-
作者:
男 dbyoung (dbyoung) ★☆☆☆☆ -
普通会员
2023/6/8 8:40:41
2楼: DLL 是跨语言的。
你可以用 VC、QT 等来编写界面,然后用 Delphi 来调用这些 DLL。

我都是用 DLL,没有用过 BPL。
----------------------------------------------
武汉天气不好
作者:
男 ldmmig (ldm) ★☆☆☆☆ -
盒子活跃会员
2023/6/8 8:57:03
3楼: 很早就这么干了
----------------------------------------------
-
作者:
男 zhyhero (zhyhero) ★☆☆☆☆ -
盒子活跃会员
2023/6/8 9:08:33
4楼: 用CDN缓存?缓解数据库的压力?
----------------------------------------------
z@S7
作者:
男 doersoft (hnysoft.com) ★☆☆☆☆ -
普通会员
2023/6/8 9:18:17
5楼: 本来就可以,不过你想跨语言,最多实现像ps的滤镜类似的插件体系.
要想通用的主界面+子界面融合又跨语言就有点难了,因为不是所有语言都在vcl/fmx的框架中.
可以看看WebAssembly能不能流行起来...
----------------------------------------------
delphi|vue|golang hnysoft|hnyerp+mes+srm
作者:
男 myid (林锋) ★☆☆☆☆ -
盒子活跃会员
2023/6/8 10:21:47
6楼: 你CS的C看成专用浏览器,就是BS了。
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2023/6/8 10:32:24
7楼: BS 的 B 是 Browser,核心是它解释执行 HTML/JS 来显示界面。

我记得有朋友在 DELPHI 上做过,把 DFM 和 PASCAL SCRIPT 在运行中加载。这样的话,相当于你的 C 是浏览器,然后 DFM 是 HTML,PASCAL SCIPT 是 JS。这样做,BS 的好处,也就是灵活性,也就有了。增加或者修改界面,不用重新编译客户端了。
----------------------------------------------
-
作者:
男 k3man (嗯哼) ★☆☆☆☆ -
普通会员
2023/6/8 10:39:45
8楼: 从服务器下载到客户端,数据库有一个版本号字段,当DLL下载回来后,就不再下载了,直到数据库的版本号出现新版。
----------------------------------------------
-
作者:
男 dbyoung (dbyoung) ★☆☆☆☆ -
普通会员
2023/6/8 11:58:33
9楼: 6楼:
  言简意赅。

8楼:
  实际操作中,应该将 DLL 模块与其支撑文件,一起压缩为7zip文件。
  下载、解压、运行。
  当然有个标记,版本号、MD5、CRC32 之类的,无需次次下载。

想起这样做,另外的俩个好处:
  1、模块独立;
  2、能尽量避免程序和数据库不匹配的问题(实际中经常遇到);
----------------------------------------------
武汉天气不好
作者:
男 fcwbad89 (fcwbad89) ★☆☆☆☆ -
盒子活跃会员
2023/6/8 13:09:10
10楼: 1.你的C如果要加功能要更新,怎么更新?QQ传?
2.你的模块放在数据库中,你的数据库是在你这里还是在客户手里,在客户手里你还得要客户给你开放数据库端口让你往你写,人家愿意?
3.编译成DLL,可以省去很多依赖包的问题,但是有很多控件有全局操作,同时运行包含这个控件的多个DLL肯定会报错,怎么解决?
3.如果不同客户同样的模块功能稍有不同,你更新时怎么区分不同客户?
4.你这套想法要花多少时间成本完成?

给你个懒人想法,给客户一个SVN客户端,连你公司的对外更新服务器,不同客户不同端口,让他们自己更新,你既可以根据不同客户开放不同版本不同功能,也不用搞数据库这套这么麻烦,也不用麻烦客户给你开放权限,同时DLL编译的体积要比bpl的大,建议你改用bpl结构
----------------------------------------------
-
作者:
男 cxg417 (cxg417) ★☆☆☆☆ -
盒子活跃会员
2023/6/8 14:30:59
11楼: 这种架构我们公司十几年前就开始使用,无论是内网部署还是外网部署都十分方便。再加上流程和功能实现参数化,客户可以随时升级新版本无无任何问题。
----------------------------------------------
-
作者:
男 doersoft (hnysoft.com) ★☆☆☆☆ -
普通会员
2023/6/8 16:37:03
12楼: http服务器放一份最新的,本地Exe+bpl的模式,启动时检查更新,有更新则自动更新,差不多就行了.
再要深化不如用BS架构了.
----------------------------------------------
delphi|vue|golang hnysoft|hnyerp+mes+srm
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2023/6/8 16:46:19
13楼: 10楼说 SVN 算是一种思路。

12楼说 HTTP,EXE+BPL,我目前是用这种办法。
----------------------------------------------
-
作者:
男 cxg417 (cxg417) ★☆☆☆☆ -
盒子活跃会员
2023/6/8 17:17:04
14楼: 用Bpl的话,如果Delphi工具升级了,是不是所有的bpl都要跟着升级才行?
----------------------------------------------
-
作者:
男 doersoft (hnysoft.com) ★☆☆☆☆ -
普通会员
2023/6/8 18:29:44
15楼: to:14楼
是的,不过相关的控件都在都正常升级了的话,重新编译一下也不费事。
----------------------------------------------
delphi|vue|golang hnysoft|hnyerp+mes+srm
作者:
男 dbyoung (dbyoung) ★☆☆☆☆ -
普通会员
2023/6/8 21:36:39
16楼: 10楼:
  1、
  企业的行业软件,不是QQ、微信等面向大众的软件。
  不会经常更新的。稳定是第一位的。
  如果是BUG,是免费升级的。需求类升级,是需要付费的。
  现在公司软件更新,都是传模块文件(DLL 模块)给客户替换一下。
  或者远程,直接帮客户弄好。
  没有所谓的升级服务器。

  2、
  不用客户开放数据库。软件框架有这个功能就可以了。
  设置一下模块文件,把它提交到数据库就可以了。
  好处是,不用多个客户端替换升级文件。
  (当然框架有自动从数据库下载新版本文件的功能)

  3、
  全局操作?从来没有遇到过你说的这个问题;

  4、
  不同客户,功能不同,如果与标准版本功能不一致,在公司行为中,属于定制版本。
  定制版本是需要付费的。当然可以为你单独定制。
  模块编写好后,通过框架,设置一下就OK了。同2;

  5、
  只是做一个框架,不是做所有模块。所以不会花很久时间;

11楼;
  介绍一下你们的框架呗。
  
我只是有这个想法。还没做。
群里,有很多人都用上了。说明这个想法是可行的。
想做这样的一个开源框架,其它语言也能使用。
目标:通用性、易用性、配置性。
BPL 模式,肯定是不会用的。
----------------------------------------------
武汉天气不好
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2023/6/8 21:42:04
17楼: 开发工具如果都用 Delphi,还是 BPL 比较好。
----------------------------------------------
-
作者:
男 wk_knife (wk_knife) ★☆☆☆☆ -
盒子活跃会员
2023/6/8 21:45:26
18楼: 一看楼上都是油车兼手动挡爱好者!
----------------------------------------------
-
作者:
男 dbyoung (dbyoung) ★☆☆☆☆ -
普通会员
2023/6/8 22:18:30
19楼: 发挥油车的价值,当然要靠老同志们了。
回帖的,都是中石化的老同志了吧......
----------------------------------------------
武汉天气不好
作者:
男 delphiilove (乌羽玉) ★☆☆☆☆ -
普通会员
2023/6/8 23:42:26
20楼: 是不是 每个 DLL 都要自己链接数据库?
----------------------------------------------
-
作者:
男 cxg417 (cxg417) ★☆☆☆☆ -
盒子活跃会员
2023/6/9 0:12:09
21楼: 回复16楼,简单的说,就是主EXE+Dll+三层模式
----------------------------------------------
-
作者:
男 dbyoung (dbyoung) ★☆☆☆☆ -
普通会员
2023/6/9 7:13:45
22楼: 20楼:
  1、如果 EXE 和 DLL 都是 Delphi 开发:
    将数据模块类,共用化,全局化。
    登录时初始化(在主 EXE 中)。
    这样所有 DLL 模块都可以使用这个全局数据模块类了。
    所有共用的东东都放到这个类中;
    当然 Connection 也放在这里,共用了,一个链接就可以了;

  2、如果 DLL 模块是其它语言开发:
    我一般用导出函数。
    用 EXE 直接导出函数,给别的语言用。
    链接肯定要多出一个了。
    当然,如果你不想多出一个链接,提交给主 EXE 来处理数据也可以的。类似于三层了。


说到数据模块类(TDataModule),单独提一句。
你可以连 SQL 的执行都封装到这里。
这样的好处是,如果以后换数据库,你只要修改这个数据模块类就可以了。
EXE/DLL 都不用作任何修改。
----------------------------------------------
武汉天气不好
作者:
男 abcjingtong (jingtong) ★☆☆☆☆ -
普通会员
2023/6/9 9:21:33
23楼: 如果不考虑将来跨平台,这样做还是可以的
----------------------------------------------
18114532@qq.com
作者:
男 doersoft (hnysoft.com) ★☆☆☆☆ -
普通会员
2023/6/9 10:40:10
24楼:   exe+bpl+dll也好, exe+dll也好,都只是分发文件的一种合理切割模式,内部2层3层delphi都支持,但如果要跨平台和语言的话就不容易了,单纯的算法是可以封闭为dll然后统一导出函数, 但如果界面UI要互通互用或统一就很难;
  是bs架构天生有优势,有统一的html+js语言来描述界面和逻辑,能热更新之类的.
所以不要抱太多的精力考虑这个事....
----------------------------------------------
delphi|vue|golang hnysoft|hnyerp+mes+srm
作者:
男 supermay (supermay) ★☆☆☆☆ -
盒子活跃会员
2023/6/9 11:15:08
25楼: DLL读数据库不太好吧。
把DLL相关的信息版本,SHA1,MD5,FTP或HTTP的URL==的放数据库中,
主程序读取数据库的数据后,去下载就行,这样数据库又不大,后台维护DLL文件也简单。
其实把业务逻辑放在中间层,前端也只是UI,不会多大。
甚至把前端UI的界面布局也放在数据库,经中间层返回,这样前端可以只是一个FORM.
----------------------------------------------
链接:https://pan.baidu.com/s/12jzmECYKhGCsHBxz8tmB6w 提取码:pelr --来自百度网盘超级会员V9的分享
作者:
男 supermay (supermay) ★☆☆☆☆ -
盒子活跃会员
2023/6/9 11:17:13
26楼: 把数据库的UI界面脚本动态生成控件,以及控件之间的简单逻辑,例如是数据校验==的,D完全可以做到并且做得很好。
----------------------------------------------
链接:https://pan.baidu.com/s/12jzmECYKhGCsHBxz8tmB6w 提取码:pelr --来自百度网盘超级会员V9的分享
作者:
男 lr46752881 (Anuo) ★☆☆☆☆ -
普通会员
2023/6/9 14:11:51
27楼: 没屌用,开发麻烦,而且还不好调试!
----------------------------------------------
123
作者:
男 kentty (kentty) ★☆☆☆☆ -
普通会员
2023/6/9 15:06:18
28楼: 客户侧都能联网了,直接把程序打包再加上一个包含版本号的文件放到一个网站上,第一次部署给程序的链接,然后再程序里自动联网检查版本号文件,有更新就下载重新启动
----------------------------------------------
-
作者:
男 hardnut (麦轲数据管家) ★☆☆☆☆ -
普通会员
2023/6/9 16:53:04
29楼: 这些个想法都试过了,大浪淘沙,只有运行在服务器端的 ISAPI模式的解决方案比较可行
----------------------------------------------
UniKeeper V10.40 -- 您最贴心的个人数据管理助手
作者:
男 board4all (搬运) ▲▲▲▲▲ -
普通会员
2023/6/9 22:33:16
30楼: WebAssembly就是这样的。而且还能支持跨平台。
Delphi最新路线图中,增加了WebAssembly的研究内容,
但是他什么时候能实现没有时间表。

天下大势合久必分,分久必合。
开发工具也逃脱不了这个轮回。
----------------------------------------------
-
作者:
男 hguhgu (满汉全席) ★☆☆☆☆ -
普通会员
2023/6/10 11:16:34
31楼: 我采用28楼的方法,简单使用
----------------------------------------------
-
作者:
男 dacsd (ddd) ★☆☆☆☆ -
盒子活跃会员
2023/6/13 11:25:31
32楼: HTTP+EXE+BPL,在服务器上建立BPL文件夹,使用的时候和本地BPL验证是否最新,不是则先从服务器下载后再加载。
----------------------------------------------
-
作者:
男 kwer (★★★★★) ★☆☆☆☆ -
普通会员
2023/6/13 15:13:24
33楼: Browser的本质就是虚拟机OS,,,你们有本事就轮子一个虚拟机出来。。。轮不出来就上脚本语言,脚本语言的本质也是虚拟机。。。很多成功的系统就是脚本语言做的,比EXE+BPL(DLL)更划算。
----------------------------------------------
==========-==========-==========-==========-==========
     多隆, 给我备一匹最快的马, 我有事要走先~~~
==========-==========-==========-==========-==========
作者:
女 hecongzhen (令狐**) ★☆☆☆☆ -
普通会员
2023/6/15 9:12:47
34楼: 前一段时间 用 delphi的 unigui 开发了一套 web程序,该模式已经能简单,方便的开发bs 程序了,而且照顾了 delphier的桌面开发xi惯。何必有去折腾其他方式呢!
如果是新开发的项目,建议可以试试unigui的 web开发。。真的很简单了

吐槽一下 :居然不能 发 xi 这个字?这也太离谱了吧
----------------------------------------------
-
作者:
男 bdl1 (bdl1) ▲▲▲▲▲ -
普通会员
2023/7/4 12:49:52
35楼: 同意楼上!
----------------------------------------------
-我的博客
作者:
男 dbyoung (dbyoung) ★☆☆☆☆ -
普通会员
2023/7/6 8:09:23
36楼: 汇报一下开发进展:

基于 DLL 窗体的模块化企业管理系统

01.只有一个可执行文件,携带方便。无需安装,可直接运行;

02.登录名称、登录密码:admin(有没有安装数据库,都是);

03.自带 MySQL 数据库、可自行安装(登录界面);
  省去你部署数据库的麻烦;
  即使机器上已经有了 MySQL,也没有任何影响;纯绿色安装;

04.内置 HEIDISQL 开源管理软件。进行 MySQL 数据库的管理;

05.如果没有安装数据库,整个界面都是空的;
  如果安装了数据库,可以登录到主界面,系统配置中,进行模块的增删改操作;

06.DLL 模块放置于数据库中,执行时从数据库下载、解压、运行。
  不是次次都需要下载,程序会自动判断是否需要更新下载(文件最后修改时间);

07.DLL 模块开发、调试,完成以后,进入主程序模块配置,将其保存到数据库中就可以了;
  不影响你正常的程序开发;

08.DLL 模块支持单个文件、多个文件(支撑 DLL 文件)打包进数据库中(7z压缩);

09.DLL 模块支持多语言编写、VC、QT、Delphi;modules 目录下有示例;

10.支持将 EXE 文件整合进框架中,将 EXE 当作一个模块来使用。
  EXE 可以是指向磁盘的路径;
  也可以将 EXE 与其支撑文件一起打包进数据库中(7z压缩);

11.自带人员管理、权限管理模块;避免重复劳动;

12.可自定义数据浏览(查询)界面、数据添加界面、数据修改界面;
  如果你对数据库熟悉,配置配置就可以了。节约开发时间;

13.界面使用多页签模式;风格以灰白、素淡为主(类似于 chrome 浏览器风格);


项目进行中,09 遇到点问题,正在攻克中。
项目在 GITHUB 上,因为使用了 Dev 控件,无法公开(以后打算移除)。
有感兴趣者,可以一起研究、学xi,开发。
----------------------------------------------
武汉天气不好
作者:
男 hawke2e (hawke2e) ★☆☆☆☆ -
普通会员
2023/7/7 8:57:18
37楼: 如果用delphi,没必要用dll,bpl也可以使用QT等写的dll。
行业软件的发布适合用 EXE+LUA+配置文件
不变的集中在EXE,LUA写业务逻辑,配置文件除了配置系统参数还可以配置界面。
所以,界面要么不用delphi的DFM自己写,要么就用QT。
这是比较彻底的解决方案,成本也高。
----------------------------------------------
软件是什么,相信很多人都说不清。
作者:
男 ritapl (ritapl) ★☆☆☆☆ -
盒子活跃会员
2023/7/7 9:48:01
38楼: 至少十五年前应该考虑的问题,现在就算了吧,别折腾了,没什么意义,delphi做服务端写接口,前端就找前端的人干吧
----------------------------------------------
-
作者:
男 dbyoung (dbyoung) ★☆☆☆☆ -
普通会员
2023/7/7 11:08:27
39楼: 回37楼:
  我也曾考虑过 
  LUA/TMSScripter/FastScript/RemobjectsPascalScript/PaxScripter/Python4Delphi,
  等脚本编程。

  但我的目的:
  这个框架可以给 Delphi、VC、QT,等开发用户用。
  而且对开发用户,没有任何限制。
  开发用户正常编写 EXE 程序。写完之后,导出DLL函数就可以了(框架也支持直接用 EXE)。
 (参考博文:https://blog.csdn.net/dbyoung/article/details/103987103?spm=1001.2014.3001.5501) 
  没有考虑跨平台。如果考虑跨平台,那考虑的事情就多了去了。
  QT/Vue.js/Java/dotNet,等等,开源框架多的是。那和 Delphi 又有毛关系?

回38楼:
  生命不就是折腾吗?没有意义也折腾。
  生命不息,折腾不止,死了就不折腾了。
  前端、后端、全栈、低代码、AI、编译器、数据库、游戏引擎,等等,
  你认为哪个有意义,你就去折腾哪个吧。



儿子研究生毕业,去蔚来折腾编译器去了。咋都奔向杭州去了?
----------------------------------------------
武汉天气不好
作者:
男 hawke2e (hawke2e) ★☆☆☆☆ -
普通会员
2023/7/8 11:43:52
40楼: 企业系统或者mis技术层面的核心就是定制化。
定制化的技术手段常见有3种:
1. 格式化的配置文件
2.  脚本
3.  开发工具
只要成本允许,定制化能用1就不要用2,能用2就不要用3。
delphi是个特殊存在,它是3但能达到2的效果,只是没再进一步发展。
其实还有4  组装式开发,相信这里没人见过。
chatgpt横空出现,改变是方方面面的。
----------------------------------------------
软件是什么,相信很多人都说不清。
作者:
男 dbyoung (dbyoung) ★☆☆☆☆ -
普通会员
2023/7/9 7:19:50
41楼: 现在只能让用户定制数据界面。
考虑加入定制化功能。我思考思考。

谢谢 hawke2e 大侠意见!
大侠不但政治有见地,技术也过硬。
哈哈哈!
----------------------------------------------
武汉天气不好
作者:
男 bestfw (bestfw) ▲▲▲▲▲ -
普通会员
2023/7/9 8:23:41
42楼: 主要是dll接口,很多年前,标准都不完全统一啊,vc和delphi 我记得,数据类型就不一样需要转换,稍有不慎就是错误。这个问题,其实你要搞的,就是微信的小程序,一个意思,把自己的系统做成一个平台。你自己搞完全么问题,但是多少人配合是最关键的,而且必须有公认的协议和标准才能做这事。各种通讯协议变得越来越高级,其实就在逼近这种平台。云服务,其实也是这个概念。统一的数据接口,其实就是一个平台。
----------------------------------------------
-
作者:
男 roadrunner (roadrunner) ★☆☆☆☆ -
盒子活跃会员
2023/7/9 11:10:56
43楼: CS程序最好的结构就是一个大EXE
花里胡哨不会带来实际利益,下载更新单个DLL比更新整个EXE更麻烦
----------------------------------------------
-
作者:
男 roadrunner (roadrunner) ★☆☆☆☆ -
盒子活跃会员
2023/7/9 11:14:11
44楼: @dbyoung 用户定制数据界面这个功能你应该慎重考虑

首先,它的工作量不小,其次,这相当于放弃了收费定制的业务,损害你们自己的经济利益。

这种出力还亏钱的事情,最好想清楚一点
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行54.6875毫秒 RSS