web-dev-qa-db-ja.com

更新の実行を可能にするマルチユーザーシステムの設計

私は、現場全体に展開されるシステムの設計を始めています。退屈な、数十セント​​のデータベースサーバーバックエンドマルチクライアントシステムです。

私がこのシステムに実装することに非常に熱心な機能の1つは、開発チームがクライアントの再起動を必要として実行中の変更を行う機能です。 UIの変更についてはそれほど心配していません。再起動が必要になる場合がありますが、動作の機能が変更されます。

現在、C#とWPF UIを使用し、MVVMアーキテクチャを使用し、PRISMと依存性注入を最大限に活用して基本的なレイアウトを開始しました。

私は現在2つのアプローチを考えました:

  1. MEFフレームワークを使用したプラグインベースのシステム。これまでのプロトタイピングでは、デフォルトの動作を定義し、ロードされているdllに応じて代替の動作を提供することができました。

  2. LUAであれ、RoslynベースのC#スクリプトの試行であれ、ある種のスクリプトサポート。これについてはまだ徹底的に調査していませんが、機能するようですが、スクリプトに公開されているツールを慎重に検討した場合に限ります。

アプローチ1の長所:小規模なプロトタイプでは問題なく動作するようで、非常に簡単に制御できます。

アプローチ1の短所:私のテストでは、オブジェクトがMEFにロードされると、アプリケーションドメイン全体をアンロードする以外はアンロードできず、ドメイン間でオブジェクトを渡すことは...言うプロセスです少なくとも。

アプローチ2の長所:展開は非常に簡単で、CSIXは既存のツールで簡単に記述できます。 LUAはそれほど違いはありません。私の(非常に限定された)テストから、最新のスクリプトが実行されていることを確認するために、各実行の前にディスクからスクリプトを再ロードすることに問題はありません。スクリプトは、絶対的には1分に1回だけ実行する必要がありますが、1時間に1回実行する可能性が高いため、これによってパフォーマンスが大幅に低下することはありません。

アプローチ2の短所:これまでのところ、開発の量は最小限に抑えられています。利用可能なものの表面を明示的に宣言する必要があります。そうしないと、要件が変更されると、何らかの方法で再コンパイルおよび再リリースされます。私の知る限り、これまでで最も機能が制限されていました。

では、どのようなアプローチでシステムを最も簡単に変更できるでしょうか。

また、どちらのアプローチでも見逃した落とし穴はありますか?

まだ検討していないオプション3はありますか?

1
Whistler

MEFは、プラグインアーキテクチャの実装など、大きな部分に適しています。これは、特定のユーザーだけが利用できるようにしたい機能がある場合に役立ちます。たとえば、グループが支払った機能を追加しました。または、HRには存在しないアカウンティング用のプラグイン。起動時にピースを動的にロードして接続するように設計されています。動的なアンロードとリロードを目的としたものではありません。

考慮する必要がある最大の問題は、展開メカニズムです。ユーザーにアプリを停止して再起動するように要求することを回避することはできません。これらの更新をどのように利用できるようにするかが問題です。いくつかのオプションがあります。

  • 超ローテク:アプリコードはファイル共有に存在し、ローダーのみがデスクトップにインストールされます。ローダーは、現在デプロイされているバージョンのディレクトリを見つけて、それを呼び出すだけです。
    • プロ:新しいアプリを新しいディレクトリにドロップするだけで、誰もが非常に簡単にアップグレードできます
    • 短所:そのファイル共有を悪意のある人物から保護することについて本当に上手でなければなりません
  • Microsoft One-Click:試さないでください。これは、アプリの現在のバージョンをダウンロードしてオンデマンドで実行する手段であるはずでしたが、サンドボックスの制約は通常、DIおよびMEFベースのアプリケーションではうまく機能しません[.____]。
    • プロ:それを機能させることができれば、アプリをホストするために必要なのはWebサーバーのみであり、管理者権限は必要ありません
    • 短所:ランタイムコンテキストが変わるため、多くのことが壊れます
  • Microsoft Software Center:企業がすべてWindows 10を使用している場合、悪い解決策ではありません。これにより、企業はアプリケーションがインストールされている各デスクトップに更新をプッシュできます。
    • 長所:企業がすでにこれをサポートしている場合、これはユーザーに更新をプッシュするためのより安全で管理しやすい方法の1つです。
    • 短所:Windows 10を超えるユーザーをサポートする必要がある場合は、機能しません
  • サイドカーアップデータアプリ:基本的に、これはVisualStudioとOffice365が使用するのと同じソリューションです。アップデータアプリはオンデマンドでアップデートをダウンロードしてインストールでき、アプリケーションはサーバーで現在のバージョンを確認します。
    • プロ:更新プロセスを完全に制御できます。更新がユーザーのローカルプロファイルに対するものである場合、管理者権限は必要ありません。
    • 短所:サーバー側のサポートとともに、開発および保守する別のアプリです。

あなたの状況では、あなたはあなたの企業にとって何が実行可能であるかについて考えなければなりません。それには、企業を運営する人々との会話が必要になります。サイドカーアップデータアプリは、ユーザーがシステムにインストールする権限を持っている場合にのみ実際に機能します。 Software Centerはそうではありませんが、企業がそれを使用している場合にのみ実現可能です。

私はそれを言うのは嫌ですが、時には超ローテクソリューションがちょうど法案に合うことがあります。ランチャーは、スクリプトまたは小さなC#アプリケーションとしてビルドできます。それは機能し、洗練されておらず、処理する必要のある管理上の魔法がい​​くつかあります。それはあなたの「オプション2」ソリューションのように聞こえます。

1
Berin Loritsch