私は、Oracleによってこの記事で提示された変更されたModelViewControllerの例に従っています。MVCを使用したJavaSEアプリケーションの設計
この例では、DefaultControllerクラスは次のようなプロパティ名の文字列を宣言します。
public static final String ELEMENT_TEXT_PROPERTY = "Text";
これらの文字列は複数の場所で使用されます。
コントローラ内:
AbstractControllerは、リフレクションを使用して、set+propertyNameという名前のメソッドのモデルを検索します。
モデル内:
モデルには、このメソッドを呼び出すセッターメソッドがあります。
firePropertyChange(Controller.NAME_PROPERTY, oldName, name);
ビューで:
modelPropertyChangeメソッドでは、
if(evt.getPropertyName().equals(Controller.NAME_PROPERTY)
私が懸念しているのは、モデルがコントローラーの静的フィールドを参照していることです。私はまだMVCをマスターしようとしていますが、このアーキテクチャがMVCが使用される目的のデカップリングを実現するかどうかはわかりません。3つのクラスすべてがコントローラーの静的フィールドを参照することは重要ですか?
編集: このチュートリアルで説明されているアーキテクチャは、コード化されているように、MVCの無効な表現ですか?もしそうなら、モデル/(モデルレイヤー)がDefaultControllerクラスで定義された静的プロパティ名に依存しないように変更できますか?
この記事は「単なるチュートリアル」であると思いますが、そこに示されているコードが主張されているデカップリングを反映していない場合、コミュニティはMVCの例としてそれを参照するのをやめるべきだと思います。