Javaである種のMVCを実装しようとしています。実際にはMVPのほうが多いですが、これは私の問題にはあまり関係ありません.
次の状況: Netbeans で作成された GUI があります (より優れた GUI エディターのため)。これは頻繁に更新および変更されます。
私の主なプロジェクトは Eclipse の方が維持しやすいので、Netbeans プロジェクトを別のプロジェクトとして Eclipse にインポートすることにしました。ここではApp
、コントローラーとモデル パッケージを含むプロジェクト " GUI
" と、ビュー パッケージを含むプロジェクト " " を使用しています。問題は、私がフォローしているパターンには、ビューとコントローラーの間に循環的な依存関係があることです。ビューが変更されるたびに、コントローラーはモデルから取得するデータを決定し、ビューに変更を加えることを通知されます。
App
のビルド パスに追加するGUI
と、「プロジェクト 'GUI' のビルド パスでサイクルが検出されました」というエラー メッセージが表示されます。そうです、このサイクルはすでに私のデザインに組み込まれています。
現在、起動時に次の方法でコントローラーにビューを登録します(これは実際のコードではありません。短縮しようとしています)
package view;
import controller.*;
class viewA{
...
public viewA() {
controllerA.register(this);
}
...
}
package controller;
import view.*;
class controllerA implements SomeListener{
...
protected viewA[] registeredViews;
public static register(viewA interestedView){
arrayPush(registeredViews,interestedView);
interestedView.addSomeListener(this)
}
...
}
コントローラーへの参照を渡し、リスナーをこのビューに登録することで、接続が確立されていることがわかります。問題は、のビルドパスにGUI
プロジェクトApp
がない場合、インポートを解決できないことです。のビルドパスにない場合も同じApp
ですGUI
。
このプロジェクト構造を維持し、MVC アーキテクチャにもこだわりたいと思います。どうすれば回避できますか?あなたの提案は何ですか?