|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
|
2023/6/8 7:35:10 |
标题: |
|
加入我的收藏 |
楼主: |
一个想法: CS 程序中,将各个模块的 DLL 文件放到数据库中。 运行时,从数据库中下载 DLL 模块到本地执行。 这样不就实现类似于 BS 的程序效果了吗? 只不过将浏览器换成了我们的 CS 客户端。 因为 DLL 模块都放到数据库中去了, 所以 CS 客户端就是一个 UI 框架而已。 文件也应该很小。一个文件就可以了。拷贝给客户也方便。 如果数据库在局域网内,那么就公司内部使用。 如果数据库在云上,那么就可以联网使用了。 也可以省略一个公司,一个 CS 端、一个 BS 端,两套程序。
不知道这个想法,有啥问题、弊端没有?
----------------------------------------------
武汉天气不好 |
作者: |
|
2023/6/8 8:01:55 |
1楼: |
20年前就这么干了,还是三层模式,不过用的是exe+bpl的模式
----------------------------------------------
-
|
作者: |
|
2023/6/8 8:40:41 |
2楼: |
DLL 是跨语言的。 你可以用 VC、QT 等来编写界面,然后用 Delphi 来调用这些 DLL。
我都是用 DLL,没有用过 BPL。
----------------------------------------------
武汉天气不好
|
作者: |
|
2023/6/8 8:57:03 |
3楼: |
很早就这么干了
----------------------------------------------
-
|
作者: |
|
2023/6/8 9:08:33 |
4楼: |
用CDN缓存?缓解数据库的压力?
----------------------------------------------
z@S7
|
作者: |
|
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了。
----------------------------------------------
-
|
作者: |
|
2023/6/8 10:32:24 |
7楼: |
BS 的 B 是 Browser,核心是它解释执行 HTML/JS 来显示界面。
我记得有朋友在 DELPHI 上做过,把 DFM 和 PASCAL SCRIPT 在运行中加载。这样的话,相当于你的 C 是浏览器,然后 DFM 是 HTML,PASCAL SCIPT 是 JS。这样做,BS 的好处,也就是灵活性,也就有了。增加或者修改界面,不用重新编译客户端了。
----------------------------------------------
-
|
作者: |
|
2023/6/8 10:39:45 |
8楼: |
从服务器下载到客户端,数据库有一个版本号字段,当DLL下载回来后,就不再下载了,直到数据库的版本号出现新版。
----------------------------------------------
-
|
作者: |
|
2023/6/8 11:58:33 |
9楼: |
6楼: 言简意赅。
8楼: 实际操作中,应该将 DLL 模块与其支撑文件,一起压缩为7zip文件。 下载、解压、运行。 当然有个标记,版本号、MD5、CRC32 之类的,无需次次下载。
想起这样做,另外的俩个好处: 1、模块独立; 2、能尽量避免程序和数据库不匹配的问题(实际中经常遇到);
----------------------------------------------
武汉天气不好
|
作者: |
|
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楼: |
这种架构我们公司十几年前就开始使用,无论是内网部署还是外网部署都十分方便。再加上流程和功能实现参数化,客户可以随时升级新版本无无任何问题。
----------------------------------------------
-
|
作者: |
|
2023/6/8 16:37:03 |
12楼: |
http服务器放一份最新的,本地Exe+bpl的模式,启动时检查更新,有更新则自动更新,差不多就行了. 再要深化不如用BS架构了.
----------------------------------------------
delphi|vue|golang hnysoft|hnyerp+mes+srm
|
作者: |
|
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都要跟着升级才行?
----------------------------------------------
-
|
作者: |
|
2023/6/8 18:29:44 |
15楼: |
to:14楼 是的,不过相关的控件都在都正常升级了的话,重新编译一下也不费事。
----------------------------------------------
delphi|vue|golang hnysoft|hnyerp+mes+srm
|
作者: |
|
2023/6/8 21:36:39 |
16楼: |
10楼: 1、 企业的行业软件,不是QQ、微信等面向大众的软件。 不会经常更新的。稳定是第一位的。 如果是BUG,是免费升级的。需求类升级,是需要付费的。 现在公司软件更新,都是传模块文件(DLL 模块)给客户替换一下。 或者远程,直接帮客户弄好。 没有所谓的升级服务器。
2、 不用客户开放数据库。软件框架有这个功能就可以了。 设置一下模块文件,把它提交到数据库就可以了。 好处是,不用多个客户端替换升级文件。 (当然框架有自动从数据库下载新版本文件的功能)
3、 全局操作?从来没有遇到过你说的这个问题;
4、 不同客户,功能不同,如果与标准版本功能不一致,在公司行为中,属于定制版本。 定制版本是需要付费的。当然可以为你单独定制。 模块编写好后,通过框架,设置一下就OK了。同2;
5、 只是做一个框架,不是做所有模块。所以不会花很久时间;
11楼; 介绍一下你们的框架呗。 我只是有这个想法。还没做。 群里,有很多人都用上了。说明这个想法是可行的。 想做这样的一个开源框架,其它语言也能使用。 目标:通用性、易用性、配置性。 BPL 模式,肯定是不会用的。
----------------------------------------------
武汉天气不好
|
作者: |
|
2023/6/8 21:42:04 |
17楼: |
开发工具如果都用 Delphi,还是 BPL 比较好。
----------------------------------------------
-
|
作者: |
|
2023/6/8 21:45:26 |
18楼: |
一看楼上都是油车兼手动挡爱好者!
----------------------------------------------
-
|
作者: |
|
2023/6/8 22:18:30 |
19楼: |
发挥油车的价值,当然要靠老同志们了。 回帖的,都是中石化的老同志了吧......
----------------------------------------------
武汉天气不好
|
作者: |
|
2023/6/8 23:42:26 |
20楼: |
是不是 每个 DLL 都要自己链接数据库?
----------------------------------------------
-
|
作者: |
cxg417 (cxg417) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2023/6/9 0:12:09 |
21楼: |
回复16楼,简单的说,就是主EXE+Dll+三层模式
----------------------------------------------
-
|
作者: |
|
2023/6/9 7:13:45 |
22楼: |
20楼: 1、如果 EXE 和 DLL 都是 Delphi 开发: 将数据模块类,共用化,全局化。 登录时初始化(在主 EXE 中)。 这样所有 DLL 模块都可以使用这个全局数据模块类了。 所有共用的东东都放到这个类中; 当然 Connection 也放在这里,共用了,一个链接就可以了;
2、如果 DLL 模块是其它语言开发: 我一般用导出函数。 用 EXE 直接导出函数,给别的语言用。 链接肯定要多出一个了。 当然,如果你不想多出一个链接,提交给主 EXE 来处理数据也可以的。类似于三层了。
说到数据模块类(TDataModule),单独提一句。 你可以连 SQL 的执行都封装到这里。 这样的好处是,如果以后换数据库,你只要修改这个数据模块类就可以了。 EXE/DLL 都不用作任何修改。
----------------------------------------------
武汉天气不好
|
作者: |
|
2023/6/9 9:21:33 |
23楼: |
如果不考虑将来跨平台,这样做还是可以的
----------------------------------------------
18114532@qq.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
|
作者: |
|
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的分享
|
作者: |
|
2023/6/9 11:17:13 |
26楼: |
把数据库的UI界面脚本动态生成控件,以及控件之间的简单逻辑,例如是数据校验==的,D完全可以做到并且做得很好。
----------------------------------------------
链接:https://pan.baidu.com/s/12jzmECYKhGCsHBxz8tmB6w 提取码:pelr --来自百度网盘超级会员V9的分享
|
作者: |
|
2023/6/9 14:11:51 |
27楼: |
没屌用,开发麻烦,而且还不好调试!
----------------------------------------------
123
|
作者: |
|
2023/6/9 15:06:18 |
28楼: |
客户侧都能联网了,直接把程序打包再加上一个包含版本号的文件放到一个网站上,第一次部署给程序的链接,然后再程序里自动联网检查版本号文件,有更新就下载重新启动
----------------------------------------------
-
|
作者: |
|
2023/6/9 22:33:16 |
30楼: |
WebAssembly就是这样的。而且还能支持跨平台。 Delphi最新路线图中,增加了WebAssembly的研究内容, 但是他什么时候能实现没有时间表。
天下大势合久必分,分久必合。 开发工具也逃脱不了这个轮回。
----------------------------------------------
-
|
作者: |
|
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)更划算。
----------------------------------------------
==========-==========-==========-==========-========== 多隆, 给我备一匹最快的马, 我有事要走先~~~ ==========-==========-==========-==========-==========
|
作者: |
|
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楼: |
同意楼上!
----------------------------------------------
-我的博客
|
作者: |
|
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,开发。
----------------------------------------------
武汉天气不好
|
作者: |
|
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做服务端写接口,前端就找前端的人干吧
----------------------------------------------
-
|
作者: |
|
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、编译器、数据库、游戏引擎,等等, 你认为哪个有意义,你就去折腾哪个吧。
儿子研究生毕业,去蔚来折腾编译器去了。咋都奔向杭州去了?
----------------------------------------------
武汉天气不好
|
作者: |
|
2023/7/8 11:43:52 |
40楼: |
企业系统或者mis技术层面的核心就是定制化。 定制化的技术手段常见有3种: 1. 格式化的配置文件 2. 脚本 3. 开发工具 只要成本允许,定制化能用1就不要用2,能用2就不要用3。 delphi是个特殊存在,它是3但能达到2的效果,只是没再进一步发展。 其实还有4 组装式开发,相信这里没人见过。 chatgpt横空出现,改变是方方面面的。
----------------------------------------------
软件是什么,相信很多人都说不清。
|
作者: |
|
2023/7/9 7:19:50 |
41楼: |
现在只能让用户定制数据界面。 考虑加入定制化功能。我思考思考。
谢谢 hawke2e 大侠意见! 大侠不但政治有见地,技术也过硬。 哈哈哈!
----------------------------------------------
武汉天气不好
|
作者: |
|
2023/7/9 8:23:41 |
42楼: |
主要是dll接口,很多年前,标准都不完全统一啊,vc和delphi 我记得,数据类型就不一样需要转换,稍有不慎就是错误。这个问题,其实你要搞的,就是微信的小程序,一个意思,把自己的系统做成一个平台。你自己搞完全么问题,但是多少人配合是最关键的,而且必须有公认的协议和标准才能做这事。各种通讯协议变得越来越高级,其实就在逼近这种平台。云服务,其实也是这个概念。统一的数据接口,其实就是一个平台。
----------------------------------------------
-
|
作者: |
|
2023/7/9 11:10:56 |
43楼: |
CS程序最好的结构就是一个大EXE 花里胡哨不会带来实际利益,下载更新单个DLL比更新整个EXE更麻烦
----------------------------------------------
-
|
作者: |
|
2023/7/9 11:14:11 |
44楼: |
@dbyoung 用户定制数据界面这个功能你应该慎重考虑
首先,它的工作量不小,其次,这相当于放弃了收费定制的业务,损害你们自己的经济利益。
这种出力还亏钱的事情,最好想清楚一点
----------------------------------------------
-
|
|