DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: webb123
今日帖子: 1
在线用户: 2
导航: 论坛 -> Web应用开发 斑竹:bodies  
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2022/11/22 11:30:40
标题:
关于Web开发的疑问 浏览:4185
加入我的收藏
楼主: 一直采用delphi开发C/S程序。之前有看过坛友采用IntraWeb、uniGUI等开发B/S模式。
但由于接触较少,有些疑惑请大家解答一下:

听闻GoLang语言是开发Web利器,但是简略的看了一下,Go语言好像是做服务端的,就好像用Delphi + Cross-Socke或Delphi + https API解释html而已。那样是不是说Go是编写服务端的语言,并不是PHP类型一样的做动态网页语言呢?

因为现在虽然C/S开发,但是很多时候客户需求可以连接上小程序等,所以也想接触下Web,主要就是小型的配合以前Delphi开发的东西,各位有什么好建议呢?
----------------------------------------------
-
作者:
男 zhyhero (zhyhero) ★☆☆☆☆ -
盒子活跃会员
2022/11/22 11:53:36
1楼: 不知道你所定义的C/S开发是哪种。
从DBconnection/DBQuery一键showhand,到n层模式,有很多实现模式。
如果你碰巧采用了n层模式,,又碰巧这n层中实现了restful,httpapi或socket,mq通讯什么的,那么,你的"小程序"完全可以直接使用这些对应层的调用,而不必非得用delphi来开发。
----------------------------------------------
z@S7
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2022/11/22 13:43:08
2楼: WEB 的开发有几个不同的时间阶段。

先说效果:效果就是用浏览器打开某个 URL,能够看到界面以及界面上的数据。这个就是所谓的 WEB;

第一个阶段:浏览器就是个 HTML 的呈现容器。浏览器里面显示的内容,比如一个表单,一个按钮,就是纯文本的 HTML 的代码描述的,浏览器把它变成可视化的页面。比如你要显示一个表格,表格里面有文字或者数字,你就在服务器端生成这个表格的描述的 HTML 文本,然后把这个文本保存为一个 HTML 文件,你的浏览器地址栏输入 http://abc.xyz.com/abc/YourTable.html 就是向 WEB SERVER(比如,IIS)请求一个叫做 YourTable.html 的文件,Web Server 就把这个文件发送给浏览器(其实就是文件下载),浏览器收到这个文件,发现它是一个 HTML 文件而不是 ZIP 等其它的文件,就直接解析里面的内容,根据里面的内存生成页面显示给用户看。

第二个阶段:
这个文件里面的内容是写死的,静态的。假设表格里面的内容根据用户请求的参数不一样而不一样,那静态的文件就不行了。因此这个时候需要能够动态改变里面的内容。这时候你可以在服务器端写一个程序,根据浏览器请求的参数不同,比如:http://abc.xyz.com/abc/YourTable?ID=123 这样请求地址,服务器端的程序去解析这个 URL,获得 ID=123,然后根据这个 ID 生成不同的内容,最终仍然是一个 HTML 格式的文本数据,把这些文本发送给浏览器。因此实现动态的内容。这个服务器端的程序,最早叫做 CGI 程序。在这个阶段,浏览器上面看到的页面,是使用服务器端的程序创建的 HTML 文本。在服务器端程序,基本上就是如何组合文本字符串。

第三个阶段:AJAX
在第二个阶段,每次客户端在浏览器上刷新页面显示的数据(比如,论坛界面的帖子目录表格的下一页),就要完全重新从服务器加载一次完整的 HTML 页面文本。如果网 - 络速度慢或者服务器反应速度慢,你就会看到浏览器界面上原来的页面消失,新的页面半天没出来。用户体验不好。而且每次要完全重新加载页面内容,但其实页面内容里面很多内容原本已经有了,你仅仅需要表格里面的新的数据内容而已。这个时候,有人把 JavaScript 放在页面代码里面,让浏览器执行。浏览器执行 JavaScript 程序从服务器端获取数据,然后把获取到的数据,在原来的页面上对应的地方修改掉某个数据的显示。效果就是整个页面还在而不是彻底重新加载整个页面,仅仅是页面里面某个位置的数据显示变化了。这个就有点像 Delphi 的客户端 VCL 程序,界面元素都不变也不用重新加载,仅仅改变界面元素的某个显示值。

第四个阶段:后端代码和前端界面彻底分离。
这个阶段,其实所谓的 WEB 开发,已经和传统的 C/S 开发很接近了。服务器端的代码只负责根据请求的 URL 返回数据给客户端。数据的格式通常是 JSON。这个时候,服务器端已经不用输出 HTML 页面代码给客户端了(第一次访问还是需要的);在浏览器已经有完整页面的情况下,就相当于 Delphi VCL Form 已经存在,浏览器要显示任何新的数据,都仅仅是向服务器发送数据请求的 URL,服务器端返回 JSON,然后浏览器把数据显示到对应的页面位置就可以了。
在这个阶段,出现了很多专门为浏览器这个客户端编写的页面框架代码,开源。这些页面框架代码,从效果来说,你可以把它看成类似 Delphi 的 VCL 框架的东西。

----------
所以,到了这个阶段,你完全可以用 Delphi 写服务器端程序,它输出数据的接口采用 REST 模式(现在的 Delphi 已经提供了现成的框架,就是所谓的 DataSnap);

而前端,如果是 Delphi 的程序,你可以通过服务器端的 REST 接口获得数据后,自己用 Delphi 的 VCL 或者 FMX 的界面来显示;

如果前端是 WEB,那你就去搞一个现成的开源的 WEB 前端框架(当然其语言通常是 JavaScript),这个 web 前端框架的最终代码是运行在浏览器里面的,它向你的服务器端请求 REST 的 JSON 数据而已。这个前端框架决定了你在浏览器里面的页面显示成什么样子,就好像 Delphi 的 Form 设计器,你设计好 Form 就决定了你的程序的界面显示成什么样子。

---------
当年 Delphi 的 C/S 以及多层的程序很牛叉的时候,开始流行 WEB,那时候的 WEB 开发其实非常原始。其实在第一个阶段,技术上就已经可以通过 JavaScript 来请求数据而不需要每次都彻底刷新页面了,但没人这样干。过了很多年,有人搞了个 AJAX,然后突然一下 AJAX 就开始流行。所以所谓的技术流行,并不是某个技术突然出现,而是某个技术出现后,有没有大佬在用。突然哪天有个大佬在用并且大力提倡了,就突然流行起来了。

转了一大圈,现在的 WEB 终于回归到类似 Delphi 的 C/S 的开发模式了。IT 行业就是这样转圈的。
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2022/11/22 13:49:29
3楼: 至于你提到的 IntraWeb、uniGUI,这些都属于第二个阶段的东西,也许现在它们也加上了 AJAX 的功能,进入第三阶段。

第二阶段的开发语言,比较典型的,PHP, ASP 等等。当然 Delphi 也有对应的框架,WebBroker 和 WebSnap 框架。你只要安装了 Delphi 就能看到。

IntraWeb、uniGUI 比 PHP 或者 ASP 好的地方在于页面的可视化开发。

页面的可视化开发,在 ASP.NET 阶段,Delphi 原本也是提供了的。

至于 Go 或者任何的其它语言,包括本来用于 WEB 前端让浏览器执行的 JavaScript 都可以写服务器端的代码。只不过,服务器端的代码究竟输出什么给客户端,在不同的阶段,做法不同。对于 Delphi 来说,同样可以写服务器端的代码,并且上述 4 个阶段的代码,Delphi 都能应付。

至于所谓的【小程序】,你可以把它看成一个 WEB 前端的东西。你完全可以用第二阶段的方式来开发,也可以用第四阶段的方式来开发,这个就看你的小程序的界面本身想做到多少功能多复杂。
----------------------------------------------
-
作者:
男 zhyhero (zhyhero) ★☆☆☆☆ -
盒子活跃会员
2022/11/22 14:28:17
4楼: 关于Unigui,我补充一些。
Unigui采用了Browser(Html/Js)->Client(Pascal)/Server(Pascal)的组织形式。其中Client对应的是MainModule,Server对应的是ServerModule。
如果用Thread来理解的话,ServerModule相当于主线程,MainModule相当于工作线程。Browser和Client之间是通过Browser端主动进行Session轮询来交换数据的。Session和Client Thread是间接联系。理论上存在一一对应关系。Browser端是异步模式,Client thread内部是同步模式。所以一些经典线程及线程同步相关的实现,在Unigui App中并不会完全正常工作。存在需要Browser端主动轮询时才能取得预期结果的情况。
UniGui在Brwoser段使用了Extjs库。Client端封装了对应的Vcl组件。在运行过程中通过封装的VCL组件动态创建这些浏览器端的Extjs组件,类似于同声传译。
你在Browser中触发的所有JS事件,经过编码通过Http协议传给ServerModule(MainThread),ServerModule查找对应Session的MainModule(Client thread),经过解析,处理,最后返回结果给Browser端。如果你开启browser的开发者工具(调试工具),会发现当前浏览页面所有可视和非可视Js对象的树状结构数据。其中包括哪个代表MainFrom,那个代表某个自定义Form或者Frame,并且他们都会有在当前浏览器页面运行空间的唯一ID。这些ID会和Client thread中对应的窗体和vcl组件值同步。
编写Unigui程序,最重要的是,理清当前代码段会是以同步还是异步模式工作,这样很多匪夷所思的问题就会迎刃而解了。主要思路就是涉及到界面响应的,基本上是异步,反之是同步的。之所以提到界面相应异步,是因为很多时候会因为异步执行导致得到结果的顺序与预期不一致。
----------------------------------------------
z@S7
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2022/11/22 19:07:40
5楼: 楼上,你对同步和异步以及线程的理解有问题。

Browser 端(前端,或者说客户端)里面执行的是 Java-Script 代码,按照 WEB 的工作方式,要刷新页面内容,不管是整个页面刷新,还是 AJAX 的方式只刷新部分显示数据,都是 Browser 端(浏览器里面执行的 Java-Script 代码)主动向服务器端发起请求。

至于你说的 UniGUI 的 Client/Server 这些都是服务器端的东西。

所以,你说【存在需要Browser端主动轮询时才能取得预期结果的情况。】 -- 这个本来就是 Web 开发的基本概念。WEB 客户端的任何新数据都是客户端主动请求服务器端获得的,服务器端没办法主动通知 WEB 客户端。而你采用 UniGUI 在 Delphi 里面写的代码是工作在服务器端的,你的 Delphi 代码是没办法主动向客户端(也就是 WEB 浏览器里面的页面)发送数据的。因此,你只能用客户端的轮询方式。我很多年没有用 UniGUI 了,不知道它是否提供了一个页面 Timer 的控件,如果有,用这个控件应该可以完成轮询的工作。假设它有这个控件,最终也是它在输出的页面 HTML 代码里面,附加了一段定时轮询的 Java-Script 代码让浏览器能够定时向服务器端发送请求而已。

所以,做 WEB 开发,绕来绕去,绕不开前端的 Java-Script。不过对 Delphi 程序员来说,简单的 Java-Script 不难,想用什么功能,去网上搜一段出来就好了,关键是要搞清楚你的这段程序它是在哪里运行,它和谁在交互。理解了大框架,细节都可以从网上搜代码出来直接用。

----------

当然,现在又因为这个问题,增加了一个新的东西叫做 WEB Socket,也就是让 WEB 端和服务器端保持一个 TCP 长连接,并且服务器端可以主动向客户端发消息。绕了一大圈,WEB 开发回到了 Delphi 当初最早的远程调用模式里面的 Socket 模式。

最早的 Delphi 的 Socket 模式大家还记得吗?服务器端工作在 211 端口。管家婆那个软件就是用的这个模式。

----------
说到 Delphi 的程序做 WEB 程序,使用 Java-Script 控制界面,我曾经用 WebBroker 框架,做了一个 CMS 的代码(功能比较简单,但大框架都有了),这里面就在前端使用了 jQuery 来做 AJAX,也嵌入了一个开源的网页富文本编辑器用于输入文章代码。

这个 CMS 我有开源:
https://download.csdn.net/download/pcplayer/9984340

这个 CMS 整个是用 Delphi 写的,基于 Delphi 本身的 WebBroker 框架。如果有人有兴趣,可以下载来看看,如果有人有兴趣,可以开个新帖子来讨论这个程序。基于 WebBroker 写 Web 程序,能够让人比较容易理解整个 WEB 的工作原理。
----------------------------------------------
-
作者:
男 sdzlb (lb) ★☆☆☆☆ -
盒子活跃会员
2022/11/22 21:13:13
6楼: 请各位大神继续参加讨论,把unigui讲明白
----------------------------------------------
-
作者:
男 winwolf (winwolf) ★☆☆☆☆ -
普通会员
2022/11/22 22:02:31
7楼: 都是经历了delphi 技术发展过程的大神,学xi了按此在新窗口浏览图片
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2022/11/22 23:01:02
8楼: 我曾用unigui结合datasnap做过一个政府外网的督查管理软件。发现这个家伙非常稳定,因为我做好一年多了都没去管它,用户从来没有找过我麻烦。
unigui其实是一种伪web,它所有的运行其实都在unigui服务器上,没有真正的客户端,它的客户端是服务器里的一个session,它的web组件是一个类vcl组件,它的web表现层采用了extjs框架。当客户第一次从浏览器访问unigui的URL后,unigui会向客户端浏览器建一个类似vcl\fmx的extjs客户端程序,当你再次访问后或者请求数据后,这些extjs组件就无须重建,而只向客户端推送更新的数据,也就是局部更新,这样运行效率还是很高的。
unigui的优势在于能够发挥delphi数据库处理和面向组件编程的强大优势,其实你不明白unigui工作内部机制也照样写程序,你只须明白你写web的一些共性的知识,主要是内存管理和异步模式。服务器资源是有限的,而客户端可能是无限的,你不能用写cs和单机的思维去写web,否则你的程序会耗尽服务器资源。例如,那怕些许的内存泄漏都可能会因为客户端访问而不断重建session导致内存泄漏积累而溢出。还有,web和android一样,为了效率一般采用异步运行模式,所以,你必须要理解回调函数的工作原理,因为web需要采用回调来改变模块的运行顺序,例如一个模态对话框,等等。
unigui不足是web组件不够丰富,为了实现一些效果你可能要写一些html\css\js来补充,开发者用这种打补丁的方式有时不会从全局考虑问题,稍有不慎可以会导致严重问题。
另外unigui还有一个问题,为了管理用户,有时会把用户sessionid保存在数据库表里,如果有人获得了一个客户端sessionid,就可以任意修改它的数据,这给安全性带来严重问题。
----------------------------------------------
-
作者:
男 doersoft (hnysoft.com) ★☆☆☆☆ -
普通会员
2022/11/23 7:50:17
9楼: 首先Golang用beego框架是可以前后端都可以编写的,当然也可以只做RestAPI服务,前端调用其接口。
UniGUI也是Delphi开发BS系统和移动端的神器,它适合于企业类管理系统从CS转向BS的过渡,开发效率非常高.
如果楼主的项目是中大型的项目,面向消费级并发非常高的,建议Golang+前端,如果是企业管理类的用Unigui或IntraWeb也是好的选择。
----------------------------------------------
delphi|vue|golang hnysoft|hnyerp+mes+srm
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2022/11/23 10:43:33
10楼: 有字眼违规,只能这样回复了。

@zhyhero (zhyhero) @pcplayer (pcplayer) @zhyhero (zhyhero) @sxqwhxq (步惊云) @doersoft (XMG-ZY)

首先感谢以上坛友的热心回复。

我不是专业的编程人员,在Delphi上面算是一个菜(技术一般)、老(混的时间长)鸟。在盒子兜兜转转也10多年的时间,平时用Delphi写些小的程序来解决工作中的问题或者提高工作效率。

再次感谢@pcplayer (pcplayer)回复,其实按我的理解,你提到的Web三个阶段,其实跟Delphi很相似。
Web的第一阶段是静态,相当于写单机程序
Web的第二阶段是动态,如ASP.NET、PHP,相当于三层中间件
Web的第三阶段是交互,相当于现在的RESTFUL API接口

虽然我菜,但是也算个老鸟。虽然没吃过猪肉,但也看见过猪跑。哈哈。

昨天发帖匆忙,其实很多观点未能表达清晰,见谅。

我举个例子,可能表述的清晰一点,比如现已经有一套中间件,运行着一个产品系统(类似进销存),并且有提供RESTFUL API,现在需要把系统的产品,延伸到一个Web介绍。

数据库<-->中间件<-->客户端   <--这个是原有模式
          |
        Nginx  <-->网页     <--这个是新增模式   

其实可以省了nginx,但是我觉得没必要再去自己解释js、css等东西。我也不喜欢IntraWeb、uniGUI这些框架,要授权、破解不用说,想好看还是需要学css,何必呢。至于流行的前端也去度娘了,比如Vue,但是这些属于小应用,没必要去上这些大型框架的东西。

1、现在问题来了,xi惯了Delphi的拖控件,写代码的方式,web前端,是不是用dreamweaver把布局排版好呢?还是有更好的办法?

2、有没有那个网站,在线提供按钮样式、颜色配置自动生成js或css

3、既然要学,肯定想找日后比较流行的方式、方法,去学xi。所以第一时间放弃了PHP,那样以这样的需求是不是要学typescript或JavaScript、css等东西呢?还是?

4、另外我喜欢开源的vscode,有推荐啥插件没有?

外面这样,天天要马,天天需要在家,所以才想者再学点什么东西。
思绪也很乱,写的也是比较笼统,各位看官,莫怪。
此帖子包含附件:
JPEG 图像
大小:513.2K
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2022/11/23 13:11:22
11楼: 10 楼,你的问题清晰了,我总结一下你的问题:
1. 你已经有服务器端,并且这个服务器端有 REST 接口;
2. 你想做 WEB;

----------

到这里,就和其它各种语言没关系了。就是如何做 WEB 前端。而且这个前端,根本不需要用 PHP 这种运行在服务器上的语言。本质上 PHP 就是在服务器上运行,根据需要输入 HTML 字符串或者 JSON 数据给客户端。其它的服务器端语言的功能也如此。

所以,你必须学会 HTML, JS, CSS,做好页面,由页面里面的 JS 去调用你已经有的服务器端的 REST 获得数据。

当然,也不是一定要从头学,拿个前端框架来搞就好了。只要想做前端页面,HTML, JS, CSS 还是必须要懂的,只不过不需要特别精通,反正都是拿别人的现成代码来改,网上资源多。
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2022/11/23 13:14:16
12楼: 当你已经有了一个有 REST 接口的服务器端,要做 WEB,就只做前端了,而前端就只有 JS。什么 UniGUI,IntraWeb 都不合适了。这两个框架本质上是运行在服务器端的。

--------
我说前端只有 JS 可能有人要抬杠:还有个 TypeScript 呢。

TypeScritp 是 Delphi 之父创造的语言,用它写的东西,最终它会编译成 JS 给浏览器执行。所以,最后还是 JS。
----------------------------------------------
-
作者:
男 zhyhero (zhyhero) ★☆☆☆☆ -
盒子活跃会员
2022/11/23 13:51:21
13楼: 你可以选择“零/低代码开发平台”,能通过简单配置来接入你现有Rest服务,甚至生成数据管理页面,不用知道JS是啥的那种……
----------------------------------------------
z@S7
作者:
男 kwer (★★★★★) ★☆☆☆☆ -
普通会员
2022/11/23 16:10:46
14楼: 第四个阶段:后端代码和前端界面彻底分离。。。从头到尾都看不见一个HTML标签,按F12也不出,全程都是JavaScript互动,那是什么阶段?
----------------------------------------------
==========-==========-==========-==========-==========
     多隆, 给我备一匹最快的马, 我有事要走先~~~
==========-==========-==========-==========-==========
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2022/11/23 16:40:41
15楼: 页面内容完全可以是 JS 输出的嘛。

如果页面内容是服务器端输出的,那你能看到 HTML。如果是 JS 输出的呢?把浏览器当画布,用 JS 在上面画图..........
----------------------------------------------
-
作者:
男 hexi (Hexi) ★☆☆☆☆ -
盒子活跃会员
2022/11/24 16:41:02
16楼: Delphi的路线图包括WebAssembly编译器,估计3~5年吧,可将Firemonkey编译为WebAssembly,到时候,的开发模式就是FireMonkey for WASM+RestFul,Firemonkey前台处理用户交互和部分计算,Rest后台负责数据存取和认证等。
----------------------------------------------
-
作者:
男 wintops (wintops) ▲▲△△△ -
普通会员
2022/11/25 15:06:34
17楼:
一个demo 见 


https://wintops.github.io/llcljs/llcl.html


https://github.com/wintops/Atopas
此帖子包含附件:
PNG 图像
大小:22.3K
----------------------------------------------
-
从D1开始
作者:
男 sensorwu (老吴) ▲▲△△△ -
普通会员
2022/11/26 8:52:11
18楼: 11楼是正解。
1. 你已经有服务器端,并且这个服务器端有 REST 接口;
2. 你想做 WEB;
-----
到这里,就和其它各种语言没关系了。就是如何做 WEB 前端。
==========

关于服务器后端,Delphi是完全胜任的,做小程序、公众号等后端都没有任何问题,包括类似PHP中动态修改HTML等,以便获取用户OpenID,我们有做好的相关控件。

关于前端,也就是WEB端,大家讨论的无非就是intraWeb,uniGui等等,作为Delphi程序员,上手相对容易,但毕竟不是正解。如果要想开发WEB,正解还是原生的js + HTMl + CSS。现在前端有很多先进框架,已经是我们delphi人员很容易学xi和符合操作编程xi惯了,比如VUE。 我也是一个delphi爱好者,以前对前端也总是畏首畏脚,因为不熟悉,总想走捷径,总认为要用上delphi知识(比如语法,比如图形界面),实际上走了很多弯路(intraWeb,uniGui都短暂用过),后来就索性花时间好好学下js + HTMl + CSS,vue框架等,B站上有很多学xi资料。只要克服了心里障碍,从根底学会,下来就很好办了。学会了js + HTMl + CSS,框架等,你就不会在去考虑intraWeb,uniGui等等。

声明下:
      并不是intraWeb,uniGui不好,反而在某些情况下很好。不同的阶段,不同的应用环境选用合适的工具,框架,方案。毕竟对delphi爱好者来说,js + HTMl + CSS + VUE的学xi成本可能高过intraWeb,uniGui等,这也是原因之一。但从长远来看,原生的是正解。包括现在用delphi开发android和IOS的APP,虽然也能用,也很不错,但毕竟有些功能很难实现,终归没有原生的好。可谁让我们是Delphi族呢?

是时候花些时间学 js + HTMl + CSS + VUE了  !
----------------------------------------------
喜欢编程的一个DOS级程序员
作者:
男 doersoft (hnysoft.com) ★☆☆☆☆ -
普通会员
2022/11/26 16:25:58
19楼: 楼主,如果已经有了服务端,建议学学Vue或LayUI之类的前端,前端得会点Js/css,像VUE有个一两个礼拜就入门了,多看看开源的项目就行。
----------------------------------------------
delphi|vue|golang hnysoft|hnyerp+mes+srm
作者:
男 fausten (fausten) ★☆☆☆☆ -
盒子活跃会员
2022/11/27 22:16:49
20楼: 前端麻烦,特别现在用vue,根本搞不懂,有项目找人做。后端是用的nginx+php+lazarus
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2022/11/28 10:37:18
21楼: 楼上,你后端用lazarus主要做什么用?
----------------------------------------------
-
作者:
男 kwer (★★★★★) ★☆☆☆☆ -
普通会员
2022/11/28 13:25:39
22楼: 后端用lazarus主要作用是提供数据服务。。。Ajax发出申请,laz回复,JavaScript刷新界面。

https://wiki.freepascal.org/fphttpserver
----------------------------------------------
==========-==========-==========-==========-==========
     多隆, 给我备一匹最快的马, 我有事要走先~~~
==========-==========-==========-==========-==========
作者:
男 doersoft (hnysoft.com) ★☆☆☆☆ -
普通会员
2022/11/29 8:05:47
23楼: 楼主这种情况,前端搞不懂,后端又有php之类 的,不如完全用unigui开发还快些,对项目业务逻辑熟悉的话。
----------------------------------------------
delphi|vue|golang hnysoft|hnyerp+mes+srm
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2022/12/1 11:29:30
24楼: @doersoft (XMG-ZY) unigui inteweb之类的就不考虑了。不伦不类,直接delphi中间件+web前端框架来的实际,还是有空学学js吧。

各位推荐下vscode编写HTML + CSS + JS好用的代码插件吗?

比如代码格式化、代码提示等等
----------------------------------------------
-
作者:
男 kwer (★★★★★) ★☆☆☆☆ -
普通会员
2022/12/1 12:41:57
25楼: 推荐下vscode编写HTML + CSS + JS好用的代码插件。。。别问问就是没有,这就是前端难的原因(没有之一),全程都是靠手搓!
----------------------------------------------
==========-==========-==========-==========-==========
     多隆, 给我备一匹最快的马, 我有事要走先~~~
==========-==========-==========-==========-==========
作者:
男 studyd (studyd) ▲▲▲△△ -
普通会员
2022/12/1 18:20:43
26楼: 可以直接用现成的ruoyi,前后端分离的版本,界面也美观,直接delphi做后端
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2022/12/2 17:35:28
27楼: 看大家聊得热闹,我大概看了看 VUE,发现这个玩意其实也是在模仿类似 Delphi 的东西嘛,什么框架,组件。

而且,目前前端的 JS 开发已经开始有了强制类型的 TypeScript 语言来做的趋势。已经有著名的前端界面框架采用 TypeScript。

看起来,其实采用 Delphi 的模式,可视化 Form 上拖拉控件,用 Object Pascal 语言来写,最后用一个类似 TypeScript 的编译器,把结果都编译成 JS/css 其实也是完全可以做到的。如果这样就比较爽了。可惜没人来干这个事,因为 Delphi 的用户太少了。

 UniGUI 其实也对基于 Form 的设计,最后翻译成了前端的 JS 界面,但它主要的开发是针对服务器端,它的代码最终是在服务器端把前端的代码生成好发送给客户端。因此就没有做到前端和后端彻底分开。所以基于 UniGUI 如果更进一步,就应该是设计好前端,是个独立的东西,和后端的数据通讯只需要经过 HTTP 来实现就好了。这样就彻底了。这样一来,写后端的代码,用 Delphi 就是 DataSnap 的 RESTful 模式,而前端可以作为单独的一个项目来做,和后端代码完全无关。这样彻底解耦,代码更简单。
----------------------------------------------
-
作者:
男 letianwuji (大器晚成) ▲▲▲▲▲ -
普通会员
2022/12/2 17:53:54
28楼: ruoyi
----------------------------------------------
相信自己,若自己都不相信,那还有谁可信。
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2022/12/2 22:39:55
29楼: 老实说,看了 VUE 的教程,发现这个玩意的代码,其实非常的对程序员不友好。

高级语言,为啥高级?就是易读易懂啊,否则不如写汇编。现在的前端代码包括 JS,明明可以写得易读的,一堆人非要写成人看不懂的样子才显得水平高。而这个 VUE 充分发挥了要显得高级的特性,语法直接整成不易读的格式。

这也是为啥 Delphi 之父,要搞个 TypeScript 的原因了。

这个 VUE 则是让程序员自己用代码去写一个按钮放哪里之类的东西,要命啊。Delphi 已经可以可视化拖放布局很多年了。

我要做一个 WEB 的话,我最头疼的是什么?是我自己设计页面,设计出来很难看,不管是布局还是配色都难看。所以,我即想要前后端分离,又想要有好看的页面,咋办?

我去搜了一些纯页面的模板,随便下载一个,页面出来非常好看。它有哪些 JS 和 CSS 支持它显示成这样的格式,我不用管,反正模板提供了。

于是,我仅仅需要对模板里面,我需要动态修改显示值的元素,进行修改。

如果是以前的纯服务器端代码,我大概是在 Delphi 的服务器端程序里面,加载模板页面,用字符串搜索,找到要修改的页面元素,然后用字符串替换,把元素的显示值修改为我的程序从数据库查出来的值,然后把修改后的页面的字符串发送给客户端,于是浏览器就显示正确的页面了。

现在要前后端分离,于是我仅仅在页面里面写 JS 从服务器获取数据,然后 JS 用数据修改相应的页面元素。

结果就是:我的 Delphi 的服务器端程序很简单,收到 http 请求后,输出数据(不管是什么数据,其实都是输出字符串),仅仅是数据,不需要考虑 HTML 的格式之类的。

而浏览器打开 index.html 以后,里面的 JS 代码通过向服务器请求数据,获取数据后写入对应的页面元素。

我自己测试了一下,成功。

这样,做一个漂亮的网页,因为使用现成的模板,样式外观我就不用考虑了。而且服务器端的代码也非常简化了。

当然,客户端,也就是页面里面的代码,还是纯手写。进一步,如果能够做一个程序,将 FireMonkey 的 Form 解析为 html 那我就可以通过 Delphi 的 Form 可视化设计,输出一个排版好的页面了;

然后再把 JS 向服务器获取数据并写页面元素的代码封装好,动态页面开发也就不难了。

个人感觉这个思路下来,比什么 VUE 舒服多了。

第一步测试成功,我写了一个博客:
https://blog.csdn.net/pcplayer/article/details/128153130
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2022/12/2 23:22:57
30楼: 又写了一篇博客:

https://blog.csdn.net/pcplayer/article/details/128155867
----------------------------------------------
-
作者:
男 yxsoft (yxsoft) ★☆☆☆☆ -
盒子活跃会员
2022/12/3 0:07:45
31楼: @pcplayer: 对你的探索很感兴趣,先支持一下
----------------------------------------------
Great!
作者:
男 satech (satech) ★☆☆☆☆ -
普通会员
2022/12/3 11:50:43
32楼: @pcplayer: 厉害,希望能有后续!
----------------------------------------------
-
作者:
男 zhyhero (zhyhero) ★☆☆☆☆ -
盒子活跃会员
2022/12/3 12:32:57
33楼: 根据我的观察,理解Unigui的运行模式得先理解Extjs,Extjs和Js的关系差不多类似于Delphi和Pascal的关系。两者(Extjs和Delphi)的共性都是存在一个或几个根对象类型,有一定的继承关系树,他们的标准库都实现了一定量的标准化组件及其行为模式。再通过Pas2Js实现了一定的等量映射转换。
在运行期,Unigui维护了两个大的对象树表,一个是位于浏览器空间的Js对象树表,一个是位于MainModule的Pascal对象树表。当其中一端发生变化,会通过一定的方法同步到另一端,使两端状态基本保持一致。例如一个经典的DBGrid页面,Unigui App实例中存在一个DBgrid,Dataset,Datasource等组件的实体,浏览器空间中存在Extjs的GridPanel,Store等。通过不断的同步DBGrid与GridPanel,DataSet与Store来达到两端的数据及状态同步。
----------------------------------------------
z@S7
作者:
男 hawke2e (hawke2e) ★☆☆☆☆ -
普通会员
2022/12/3 16:58:46
34楼: @pcplayer: 你对vue怕是有误会吧。vue本来就有不少拖拉组件的可视化设计器,不需要写代码摆设button,而且vue就是前端把数据模型跟渲染分开来,
程序员操作数据模型即可,如何渲染交给vue;vue提供了DSL让程序员方便操作数据模型,不存在你所说的难懂。
何必重复造轮子。

@zhyhero:按你说unigui的策略就不好。局域wang还可以,互联wang不合适,因为不是所有地方的带宽都很充裕,数据一变就得同步到页面,要求太高了。

现在的软件工程领域,诸侯割据,没必要较真。
alphacode的理念是: 自然语言 => 神经W络 => 源代码
只要喂足够多的(自然语言写的需求,源代码实现体)给神经W络训练,神经W络就能自动产生代码。
个人认为依然跳不出软件工程的框框,最后得到的只不过是比vue更好用的只适用于特定领域软件开发的工具罢了。
----------------------------------------------
软件是什么,相信很多人都说不清。
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2022/12/3 17:24:34
35楼: 34楼,我初步看到的 VUE 的教程,就是教如何用代码把一个页面元素表达出来。类似 delphi 的用代码创建 button 的实例并显示出来到某个地方。

如果界面上的元素和布局经常性地要跟随数据的变化而变化,用代码创建界面元素然后操控它这样的方法当然有用。但对普通的界面设计来说,这样就太麻烦了。

我去搜一下看看有什么可视化工具看看是什么样子。
----------------------------------------------
-
作者:
男 studyd (studyd) ▲▲▲△△ -
普通会员
2022/12/3 17:54:53
36楼: 做B/S不管怎么弄,都逃不脱html,js,css,看了一些前端框架,就ruoyi看起来比较适合,也是vue的,编译型,内部有现成的分页控制,界面都是拿来可用,就是需要做后端口,没有现成的,需要去实现
----------------------------------------------
-
作者:
男 hawke2e (hawke2e) ★☆☆☆☆ -
普通会员
2022/12/3 21:21:50
37楼: 现在诸侯割据,各自为政,一项开发技术里不少设计都是设计者的个人喜好,比如:vue非得用MVC,不用会不会更好呢?
又比如:你非得重新开发个程序实现把delphi设计的form转成js页面;而,不用vue来完成此前端的事。
更多是个人喜好,没必要较真;用爱发电,我个人不赞同。
硬件跟软件不同,对于硬件,
比如:洗衣机,设计者想把自己的作品做成精品,无论以前还是以后都不可避免要花费大量的时间和人力。
又比如:手织的毛衣,虽然已经比不上机器织的毛衣,但它是独一无二的。
所以,设计者因为热爱而追求精益求精,值得鼓励,也值钱。

然而,对于软件,其开发过程以后完全可以放在虚拟世界里,没有时间和人力限制。
所以,即使现在那些因为作者怀着喜好怀着伟大志向打造的所谓“精品”,以后也比不上机器写的。
何必重复造轮子呢?!
----------------------------------------------
软件是什么,相信很多人都说不清。
作者:
男 isxuzhu (e.Wong) ★☆☆☆☆ -
盒子活跃会员
2022/12/8 10:20:55
38楼: IntraWeb就可以使用漂亮的模板,效果挺好的。十年前使用过。目前一直使用UniGUI
----------------------------------------------
你我,都可以是个造梦者!欢迎加入脚本引擎PaxCompiler交流群303904495http://www.cnblogs.com/fireboxsoft有需要错别字检测软件的朋友可以在我博客上的地址下载使用,备注“2ccc”的朋友可以免费获取超级黄金VVVVVVVVVVIP授权
作者:
男 doersoft (hnysoft.com) ★☆☆☆☆ -
普通会员
2022/12/10 11:08:03
39楼: 我是Vue+Golang,Unigui打天下了,快速做原型或企业中小型系统,Unigui好用的很,效率高,真正的追求团队开发,前后端分离的,项目预算和时间够的,就Vue+Golang/Delphi/Java.
----------------------------------------------
delphi|vue|golang hnysoft|hnyerp+mes+srm
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2022/12/11 22:55:02
40楼: 对于delphi做web优势在哪?劣势在哪?
优势是严谨的语法、良好的内存管理、面向组件的编程和强大在数据库能力,这些都是写服务器后端的优秀基因。特别是datasnap结合firedac和json技术,可以在服务器写函数并回调客户端函数。客户端可以是linux x86\android\ios\web\Mac OS,就是不能是linux arm\mips\loongarch。
劣势是没有好的web组件,表现层差了些。unigui和她的第三方组件公司提供了很多WEB组件,但这类组件与VCL太相似,没有firemonkey组件漂亮,更没有网上那些专门写前端网站和手机app漂亮,当然intraweb的UI就更差了。
记得多年前有frangPage、DreamWare这种网页设计器。如果真能像 pcplayer 先生所述的,用网页设计器做出前端,用delphi+datasnap做后端,那delphi就是BS web开发神器了。
其实你仔细阅看datasnap的帮助文档和demo里面就有datasnap的web开发的javascript的示例,只是我没js基础,也没那耐心去搞html+css+js。
但delphi+datasnap+firemonkey做手机app还是非常不错的选择。这个已经没有什么技术障碍了。
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2022/12/11 23:32:57
41楼: 这里呢我还想说说datasnap回调客户端函数。有人说这个没什么实用价值,可以说是思之不深悟之不透。
datasnap的精髓在于客户端能够调用服务器函数和服务器能够调用客户端函数。
搞中间件的人都熟悉客户端调用服务器函数,但对服务器调用客户端可能是一头雾水,而且许多中间件并不提供这种功能,因为技术是把双刃剑,搞得不好会伤及自身。
那么datasnap是怎样调用客户端的呢,其实是用回调实现的,大家都明白回调函数就一个主调函数的参数是一个函数指针,这个指针指向回调函数,在主调函数体里再调用这个函数指针,这样调用主调函数时传给回调函数实参就能够调用回调函数。
那么这样绕有什么用呢?假设有datasnap服务器A和客户端b、c。在A写了一个主调函数,它的一个参数是一个写在客户端b的回调函数。现在你在b调用A的主调函数,此时A会根据b的客户端id和回调id,决定调用那个客户端的回调函数。这样你就可以在b调用c的函数。对于android客户端,这个函数是可以是获得本机参数,拨打电话,甚至更多其他功能。也就是用b可以为c做很多事,就像b为自己做事一样。
这个功能就很强大了,也很有破坏力,好在,datasnap只提供有限的回调能力。
----------------------------------------------
-
作者:
男 cocobom (xiaozi) ★☆☆☆☆ -
盒子活跃会员
2023/1/28 0:34:49
42楼: restfull搭配浏览器就可以,B端可以很多种开发方式,关键是不需要服务端维持状态,通俗点就是浏览器几时去点“下一步”都行。
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行94.72656毫秒 RSS