4

Win32 Delphi アプリケーションのデータを Web アプリケーション用のリモート データベースと統合する出発点を探しています。

このプロジェクトが解決しようとしている問題:

1) デスクトップは vpn 経由でうまく機能しません。リモート オフィスのユーザーは、代わりに Web アプリを使用できます。

2) 一部の企業は、デスクトップ アプリよりも Web アプリを好む

3) モバイル デバイスは、フロント エンドとして Web アプリにヒットする可能性があります。

私が特定した問題:

Web アプリケーションは Unix ベースのシステム (おそらく Linux) で実行され、デスクトップ アプリケーションは NexusDB を使用し、Web アプリケーションは Postgres である可能性が高くなります。異なるプラットフォームとデータベース。

Delphi を使用すると、このプロジェクトでは Microsoft Sync Framework を使用できないようです。

私が最初に考えたのは、Web アプリに標準の REST API を提供し、ローカル データベース サーバーから n 分ごとにデスクトップ アプリがクライアントであるかのように API をヒットさせることでした。私はすでにこれで目にするたくさんの問題を抱えています!

4

4 に答える 4

6

リチャード、私は以前にこの道をたどりましたが、私が言えることは、それをしないでください! 私は、大規模な Delphi デスクトップ アプリケーション (250 を超えるフォーム) を DBISAM で実行している会社で働いていました (あなたが持っているものと非常に似ています)。クライアントは、人々がリモートで作業し、Web アプリとデスクトップ アプリを同期して変更できるように、「Web」インターフェイスを必要としていました。数年後、アプリケーションはひどいものになりました。2 つの異なる場所で同じデータを管理するのは悪夢だったので、データの問題とユーザー ワークフローはひどいものでした。

データベースを MySQL (Delphi と Web Client の両方がヒット) のようなものに移動し、2 つのインターフェイス間で 1 つのデータベースを使用することをお勧めします。Delphi クライアントが VPN 経由でうまく機能しない理由は、NexusDB や DBISAM などのデスクトップ データベースが、クエリを実行するときにパイプ経由で多くのデータをコピーするためです (すべてのデータをプルバックしてから、フィルター/順序などを実行します)。クライアント/サーバー (SQL Server や MySQL など) では、すべての面倒な作業がサーバー上で行われ、結果のみが返されます。もちろん、Delphi アプリを MySQL のような DB に移行すると、速度の問題が一気に悪化する可能性がありますが、それでは #2 と #3 を解決できません。

もう 1 つのオプションは、アプリケーション全体を Web に移行し、サポートするアプリケーションを 1 つだけにすることです。もちろん、Delphi のようなツールを使用する優れた UI 開発者は、特にデータ入力の多​​いアプリケーションでは常に、Web アプリに対して優れたユーザー インターフェイスを作成できるため、それを選択できない場合があります。

私は「データの同期」に非常にうんざりしています。

私の2セント相当。マイク

于 2011-04-26T15:40:08.133 に答える
5

RESTfulベースのORMを使用する場合、たとえば、AJAXアプリケーションとClient 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サーバーよりも高速)とクライアント用の高速HTTPAPIを使用してサーバーを実装します。HTTPSを使用して安全な接続を処理することもできます。

IMHO、このようなORMを使用する方が、データベース接続のみを使用するよりも優れています。理由は次のとおりです。

  • これは、より厳密にn層の原則に従います。ビジネスルールはDelphiサーバーで1回記述され、サービスとビジネスオブジェクトを使用したRESTful操作のみを使用します。
  • 接続にはHTTP/1.1を使用します。これは、直接のデータベース接続よりも高速で、インターネット全体でより標準的であり、HTTPSを介して強力に保護できます。
  • JSONとRESTfuloverHTTPは、AJAXアプリケーションのデファクトスタンダードです(MicrosoftでもWCFに使用しています)。
  • データはJSONを使用して送信されます。これは、複数のフロントエンドに非常に適した形式です。
  • ステートレスアプローチは、接続されていないモードでも非常に強力です。
  • データベースのローカルの小さなレプリケーションを使用すると(これにはSQLiteをお勧めします)、非接続モード(DelphiクライアントまたはHTML 5クライアントの場合)でクライアントにアクセスできます。
于 2011-04-26T18:35:35.610 に答える
2

1 つのデータベースと 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 に答える