4

我正在寻找一些将 Win32 Delphi 应用程序的数据与 Web 应用程序的远程数据库集成的起点。

本项目打算解决的问题:

1) 桌面在 vpns 上表现不佳。远程办公室的用户可以改用网络应用程序。

2)一些公司更喜欢网络应用程序而不是桌面应用程序

3) 移动设备可以将网络应用程序作为前端。

我发现的问题:

Web 应用程序将在基于 Unix 的系统上运行,可能是 Linux,而桌面应用程序使用 NexusDB,而 Web 应用程序可能是 Postgres。不同的平台和数据库。

使用 Delphi,似乎 Microsoft Sync Framework 不适用于该项目。

我的第一个想法是为 Web 应用程序提供标准 REST API,并让桌面应用程序访问 API,就好像它每 n 分钟从本地数据库服务器访问一次客户端一样。我已经看到了很多问题!

4

4 回答 4

6

理查德,我以前一直走这条路,我只能说不要这样做!我曾经为一家在 DBISAM 上运行大型 Delphi 桌面应用程序(超过 250 个表单)的公司工作(与您所拥有的非常相似)。客户想要一个“Web”界面,这样人们就可以远程工作,然后让 Web 应用程序和桌面应用程序同步更改。好吧,几年后,应用程序很糟糕——数据问题和用户工作流程很糟糕,因为在两个不同的地方管理相同的数据是一场噩梦。

我建议将您的数据库移至 MySQL(Delphi 和 Web 客户端都命中)之类的数据库,并在两个界面之间使用一个数据库。Delphi 客户端无法在 VPN 上正常运行的原因是,像 NexusDB 和 DBISAM 这样的桌面数据库在运行查询时会通过管道复制大量数据(拉回所有数据,然后过滤/订购等)——这不是真的客户端/服务器,如 SQL Server 或 MySQL,所有繁重的工作都在服务器上完成,只有结果才能返回。当然,将 Delphi 应用程序移至 MySQL 之类的 DB 可以共同提升速度问题 - 但您并不能解决 #2 和 #3 问题。

另一种选择是将整个应用程序移动到网络上,并且只支持一个应用程序。当然,像 Delphi 这样的工具中优秀的 UI 开发人员总是可以为 Web 应用程序提供出色的用户界面——尤其是在数据输入繁重的应用程序中——所以这可能不是你的选择。

我会非常厌倦“同步数据”。

我的 2 美分值。麦克风

于 2011-04-26T15:40:08.133 回答
5

如果您使用基于RESTful 的 ORM,您可以让例如 AJAX 和客户端 Delphi 应用程序调用同一个 Delphi 服务器,使用 JSON 作为传输格式,使用 HTTP/1.1 作为远程连接层,Delphi 和 Javascript 对象来访问数据。

例如,如果您在浏览器中输入http://localhost:8080/root/SampleRecord,您将收到如下信息:

[{"ID":1},{"ID":2},{"ID":3},{"ID":4}]

如果你要求http://localhost:8080/root/SampleRecord/1你会得到:

{"ID":1,"Time":"2010-02-08T11:07:09","Name":"AB","Question":"To be or not to be"}

如果您对 JavaScript 有所了解,任何 AJAX 应用程序都可以使用它。

同样的 HTTP/1.1 RESTful 请求(GET/POST/PUT/DELETE/LOCK/UNLOCK...)已经在任何客户端 HTTP/1.1 应用程序中可用。该框架使用非常快的内核模式http.sys(比 Windows 上的任何其他 HTTP 服务器更快)和客户端的快速 HTTP API 来实现服务器。您甚至可以使用 HTTPS 来处理安全连接。

恕我直言,使用这样的 ORM 比仅使用数据库连接更好,因为:

  • 它将更严格地遵循 n-Tier 原则:业务规则在 Delphi 服务器中编写一次,您只使用业务对象的服务和 RESTful 操作;
  • 它将使用 HTTP/1.1 进行连接,比任何直接数据库连接更快、更标准的 Internet 连接,并且可以通过 HTTPS 得到强大的保护;
  • JSON 和 RESTful over HTTP 是 AJAX 应用程序的事实标准(甚至微软也将其用于 WCF);
  • 数据将使用 JSON 传输,这是一种非常适合多前端的格式;
  • 无状态的方法使它非常强大,即使在非连接模式下;
  • 使用数据库的本地小型复制(为此我们鼓励使用 SQLite)允许您在未连接模式下进行客户端访问(对于 Delphi 客户端或 HTML 5 客户端)。
于 2011-04-26T18:35:35.610 回答
2

我建议您拥有一个数据库和两个前端(为后端工作调用 SOAP 方法的 Web UI,以及 Delphi 中基于 SOAP 方法调用的富客户端,以及实现包含业务逻辑的 SOAP 可访问方法的 SOAP 服务器层)。

根据您的描述,您认为复制只会加快您的速度,但它会做的是减慢您的速度并导致您遇到必须手动解决的复制、一致性和关系完整性问题(由您)。

于 2011-04-26T15:51:54.147 回答
1

看看这个

CopyCat 是一个数据库复制引擎,作为 Embarcadero Delphi 的组件集编写。CopyCat 自 2004 年开始投入生产使用,并且非常稳定。许多小型到大型企业每天都依赖它来进行站点间同步、巡回工作、数据库备份等应用程序。我们相信它也能满足您的需求。继续阅读...

于 2011-04-26T15:40:54.483 回答