1

基本的なオンラインの共同 IDE 用の Java アプリケーションを構築しています。このアプリケーションでは、クライアントはサーバーにコマンドを送信し、サーバーはこれらのコマンドをシリアル化し、結果を各クライアントに返します。コードのパフォーマンス、効率、および単純さを最大化するアーキテクチャ スタイルを決定しようとしています。

現在、私はクライアント サーバー モデルとパブリッシュ サブスクライブ モデルの一種のハイブリッドを使用しています。クライアントは、コマンド (つまり、コードの編集、リモート コンパイルなどの要求) をサーバーに送信します。特定のクライアント コマンドの場合、クライアント側のファイルは、サーバーがコマンドに応答するまで実際には変更されません。このプロジェクトの主要な目標の 1 つは、IDE でリアルタイムの共同作業を可能にすることであるため、キーストロークが入力されるたびにクライアント コマンドが送信されます。これはクライアントサーバーの側面です。

ただし、クライアントは他のクライアントからリレーされたイベントも受信する必要があるため、純粋なクライアント/サーバーのセットアップではありません。ExecutorService クラスを使用して、このパブリッシュ/サブスクライブ動作を実装しています。

私の質問は、このようなアプリケーションに対応する特定のアーキテクチャ スタイルはありますか? アプリケーションの目標を達成するための別のアプローチはありますか? それとも、私はすでに最高のアーキテクチャ スタイルを使用していますか?

4

1 に答える 1

2

混合スタイルは、複雑なシステムでは一般的です。最も重要なことは、使用されるスタイルによって促進される品質属性が互いに補完し合い、緊張を生み出さないようにすることです。作成された緊張は、明らかに対処する必要があります。

「サーバーがコマンドに応答するまで、クライアント側のファイルは実際には変更されない」という隠された品質属性があるようです。これは、publish-subscribeに加えてcall-returnスタイルを使用することを選択した理由を示しています。ここでパフォーマンスのためにブロッキング呼び出しが発生することを心配していますが、データの整合性の問題についても心配する必要があります。

これについて少し考えてみると、適切なメッセージのセットで純粋なパブリッシュ/サブスクライブスタイルを使用できる可能性があります。

「使用する適切なスタイル」の観点から、品質属性に焦点を当て、設計上の決定によって促進および抑制されるものについて具体的に説明します。あなたがここに書いたことに基づいて、私は、あるスタイルを別のスタイルよりも強く主張するために、具体化する必要のあるいくつかの追加のシナリオがあると思います。

于 2012-10-04T20:06:51.717 に答える