3

アプリケーションがあり、Observer を使用して解決する必要があります。コードの実装が長いので、問題を要約したいと思います。

アプリケーションを起動します。

秘書または学生を選択できるLogInWindowがあります。

秘書は、学生、コース、および特定のコースの学生の結果を追加できます。生徒はその結果のみを見ることができます。

オブザーバーを使用して、秘書がそのアプリケーションのインスタンスにログインし、学生がそのアプリケーションの別のインスタンスにログインしている場合、秘書がコースでその学生の結果を追加すると、その学生がそのリストに即座に表示されるようにする必要がありますその新しいコースとその結果。

データはtxtファイルから読み取られます。

私の解決策。秘書ウィンドウはオブザーバーです StudentWindow はオブザーバーです ResultRepositoryFile はオブザーバブル オブジェクトです

AddButton をクリックすると、コントローラは Result(studentName, courseName, result) を ResultRepositoryFile に追加します。秘書ウィンドウ オブザーバーはそれを確認し、メッセージを出力して、ResultRepositoryFile を含む txt ファイルを保存します。

StudentWindow で RefreshButton をクリックすると、ResultRepositoryFile がこのウィンドウからリストに再ロードされ、新しく追加された Result.class が表示されます。

疑問があるので、これは正しい方法ですか?

Observer を使用して同じアプリケーションの 2 つのインスタンスを同期する方法は?

お読みいただきありがとうございます。お役に立てば幸いです。

4

2 に答える 2

3

複数の人が同時にアプリケーションを使用する場合は、テキストファイルではなくデータベースを使用する必要があります。複数の人が同時にテキストファイルに書き込むと、テキストファイルが破損する可能性があります。

MySQLのようなリレーショナルデータベースをお勧めします。

学生ウィンドウには更新ボタンがあるため、学生ウィンドウは常にデータベースから最新のデータを取得します。

秘書がデータベースに結果を追加すると、データベースはロックされ、追加がデータベースにコミットされるまで、誰もその結果にアクセスできなくなります。データベースは、秘書が結果を追加すると同時に他の結果へのアクセスを許可します。

秘書がデータベースに結果を追加したことを生徒に通知する場合を除いて、ObservedおよびObservableは必要ありません。

追加するために編集:

秘書ウィンドウは監視対象であり、監視対象は秘書がテキストファイルに追加した結果です。

Studentウィンドウは、Observableに基づいてウィンドウを更新します。秘書ウィンドウは、結果の学生IDに基づいて学生ウィンドウインスタンスにアクセスできる必要があります。

于 2012-12-17T15:31:52.207 に答える
1

オブザーバー デザイン パターンの使用に少し熱心だと思います。デザイン パターンを読んでいないとします。どのように実装しますか。この問題にアプローチする方法は次のとおりです。生徒にはフラグの結果が追加され、結果オブジェクトの関連付けが行われます。幹事が科目の結果を追加すると、幹事が結果を追加する科目を選択したすべてのログイン生徒が検索され、単に結果フラグが true としてマークされます。 (明らかに、テキスト ファイル/データベースも更新する必要があります) .これは、おそらく何らかのパフォーマンス要因のために、結果が追加されたかどうかを取得するためだけに DB/ファイルをヒットしたくない場合です。ページは、db からフェッチする代わりに、結果オブジェクトから簡単に取得できます。個人的には、更新の代わりにajax呼び出し(基本的にポーリング)を起動することを好みます

于 2012-12-17T15:44:18.650 に答える