2

Java を学ぶときにいくつかのより少ないプログラムを作成した後、私がプログラムを設計した方法は、Model-View-Control を使用することです。MVC を使用すると、ビューで使用するモデルに大量のゲッター メソッドがあります。MVC を使いこなす一方で、新しい値が追加されるたびに、モデルに 2 つの新しいメソッドを追加する必要があり、ゲッターとセッターですぐに散らかってしまいます。

だから私は、引数をとるnotifyObserverメソッドを使用する必要があるかもしれないと考えていました。しかし、すべての値を単独で送信するのはあまり賢明ではないので、すべての値、できれば実際に変更された値のみを含む一種のコンテナーを送信する場合は、おそらくそうであると考えました。これにより、大量の getter メソッドを使用する代わりに、関連するすべての値をコンテナーに入れるモデルに 1 つのメソッドを使用するだけで済みます。次に、ビューで、コンテナから値を抽出し、それらを正しいフィールドに割り当てる更新から呼び出されるメソッドを作成します。

これに関して2つ質問があります。

最初:これは実際にこれを行うための実行可能な方法ですか。これらの線に沿って何かをすることをお勧めしますか?

第二に、この計画を使用し、実際には変更されていないフィールドを送信し続けたくない場合。単一の値ごとに値が null でないかどうかを if ステートメントで確認する必要なく、どのように処理すればよいでしょうか?

4

3 に答える 3

1

モデル クラスに getter (および setter) が多すぎると感じた場合は、フィールド全体が多すぎる可能性があります。モデル内にいくつかの異なるクラスが隠れている可能性はありますか? これらを別々のクラスに抽出すると、モデルがより管理しやすくなる場合があります。

あなたが考えている関連付けられたコンテナも実行可能かもしれませんが、なぜすべてのデータを複製するのでしょうか? 代わりに、関連付けられたコンテナーをモデルで直接使用して、考えられるすべてのプロパティを格納できます。また、オブザーバーが更新を取得するためにこれを渡すこともできます (もちろん、できれば変更不可能なコンテナーにラップされます) - このセットアップでは必要ありませんが。

一般に、Java は冗長な言語であり、すべての getter と setter (およびそれ以上) を配置する必要があります。ただし、適切な IDE であれば、キーを数回押すだけでそれらを生成できます。それらを一度だけ書く必要があることにも注意してください。冗長とは、読みやすいことも意味します。

于 2010-03-20T20:51:53.393 に答える
1

私は MVP パラダイムに精通していますが、コメントするのに十分なほど似ていることを願っています。ゲッター (およびセッター) 自体は必ずしも悪いものではありませんが、サブシステムが強く結合しすぎていることを示している場合があります。これを分離するための非常に優れた方法の 1 つは、イベント バスを使用することです。 GWT アプリの設計に関するベスト プラクティス を参照してください。これにより、ビューは何か重要なことが起こるたびにコントローラーがリッスンするイベントを発生させることができ、ビューの更新に対応するモデルで何かが変更されるたびに、ビューはイベントをリッスンできます。理想的には、モデルをビューに渡す必要さえありません。変更を増分ピースに分割し、ビューにこの部分を変更してからこの他の部分を変更するように指示するだけでよい場合です。

于 2010-03-20T20:42:12.670 に答える
0

ゲッターが多すぎても大丈夫です。しかし、セッターは必要ありません。ビューは、モデルの読み取り/クエリのみを行うことになっています。

MVC パターンは、非対称的なものを促進する必要があります。コントロールは、ロジックを埋め込むモデル内のメソッドを呼び出してモデルを更新し、それに応じて状態を更新します。これはカプセル化を尊重します。ビューは、ゲッターを介してモデルを読み取り/クエリします。これは情報隠蔽に少し反しますが、それが MVC のしくみです。

私はイベントですべての情報を個人的に渡すつもりはありません。私には複雑に思えます: 静的に型付けされていないもの (ハッシュマップを渡すなど) か、大量の型付きイベントが発生するかのどちらかです。私は単純なものに固執し、モデルに (おそらく多くの) ゲッターを入れます。

于 2010-03-20T20:30:33.133 に答える