0

私は、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の例としてそれを参照するのをやめるべきだと思います。

4

1 に答える 1

1

私はJava(またはデスクトップアプリケーション)の開発者ではないので、これをすべて理解してください。

まず第一にstatic、任意のコードのフィールドはグローバル状態を表します。これは、オブジェクト指向コードの慣行に完全に反します。

チュートリアルのコードがSoCに違反しているという心配は、その通りです。しかし、繰り返しになりますが、これは基本的なチュートリアルとして意図されたものであり、あまり高度なものではありません。目標は、MVCトライアドの一部を示し、それらがどのように相互作用し、主な責任が何であるかを少なくとも表面レベルで理解することです。本番コードにコピーして貼り付けることを意図したものではありません。

それを明確に示すと、このコードに「モデルオブジェクト」が存在することがわかります。実際の状況では、モデルはレイヤーになります。

MVCをより深く理解したい場合は、次の3つの読み物をお勧めします。

于 2012-08-01T00:54:57.593 に答える