私はGISベースのネットワークインベントリソフトウェアを使用しています。これには、デスクトップとWebアプリケーションの2つのバージョンがあります。
現在、すべての機能をデスクトップとWebに個別に実装する必要があります。両方のシステムの唯一の共通要素はデータベースです。
例えば。あるタイプのマップオブジェクトのコンテキストメニューにエントリを追加したい場合は、両方のコードベースで追加する必要があります(そのメニューエントリが操作されたときに何が起こるかと同様)。
メンテナンスを簡略化するために、両方のアプリケーションに対して一度機能を定義して実装したいと思います。実装の非常に高レベルなバージョンをシリアル化して、データベースに保存することができました。プログラムの起動時に、データベースからフェッチしてデシリアライズします。高レベルの命令は個別に実装する必要がありますが、再利用できます。
これは私の考えの解決策になると思いますが、ある種のメンテナンスの地獄を別のものに変えるだけだと心配しています。さらに、高レベルの命令を使用するとタスク固有の最適化が許可されない可能性があるため、パフォーマンスが制限される可能性があります。
両方のアプリケーションに共通の実装を持つという目標を追求する必要がありますか?データベースのみを共有するデスクトップアプリケーションとWebアプリケーションの両方に同じ機能を提供するためのより良い設計またはアプローチは何ですか?
従うべき良いパターンは、ユーザーインターフェイスを含まないコードをライブラリまたはWebサービスに移行することです(デスクトップアプリが常にWebサービスにアクセスできる場所にIP接続される場合)。
そして、htmlを使用してGUIを構築します。 HTMLベースのアプリケーションがWebケースでどのように機能するかは、説明する必要はありません。しかし、デスクトップアプリの場合、さまざまな優れたアプローチがあります(たとえば、アプリにWebブラウザーを埋め込み、ローカルWebページを実行するだけです。electronのようなことを行うように設計されたツールキットを使用しますが、これに関する多くのバリエーション)。
これは、一度GUIを作成するという意味ではありません。真のWebベースの配信とデスクトップバージョンでは、htmlアプリを少し異なる方法で構成する必要があります。しかし、彼らは圧倒的な量のコードを共有し、機能の同期を簡単に保つことができます。 UIの「デスクトップ」バージョンをサポートすることは、ChromeおよびFirefox、MSIEをサポートすることとほぼ同じになります。
同じ機能を提供するデスクトップアプリケーションとWebアプリケーションがあり、それらがデータベースのみを共有している場合、コードの重複が多数発生します。したがって、アーキテクチャを少し変更する必要があります。
ステップ1:最初に希望するステップは、Webアプリケーションに contentに基づいてjsonまたはhtmlコンテンツを提供するエンドポイントを作成することですtype リクエストの。これにより、ビジネスコードの重複を減らすことができます。複製はUIコード内のみになります。
ステップ2:Angular、React、Vueなどの最新のJavaScriptフレームワークを使用して、WebアプリケーションのUI部分を実装できます。既存の現在のWebアプリケーションからビジネスデータを取得する別のUIアプリケーション。ここで、UI Webアプリケーションを electoron などのテクノロジを使用してデスクトップアプリケーションとして変換します。
このようにすると、重複はゼロになります。ただし、欠点は、angular(または反応またはビュー)または電子などの最近のテクノロジに精通する必要があることです。
Webアプリケーションとデスクトップアプリケーションは、同じものの2つの異なるビューと考えてください。
私があなただった場合(この時点でやり直すことができない場合があります)、ロジックをHTTP APIとして実装し、デスクトップクライアントとWebクライアントの両方を統合します。 Webクライアントからのリクエストに対する書き込み機能の使用を制限するだけです。