2

グルーコードに関する意見を得るために、この質問をしました。

たとえば、クラス (疑似コード) があるとします。

class MyClass
    int attribute a
    string attribute b

そして、そのデータ モデルを表すには、a を表すスライダーとテキスト ボックスの両方と、b を表すウィンドウ ラベルのテキスト ボックスがあります。

明らかに、これらのビュー オブジェクトの 1 つが変更された場合、他のオブジェクトも更新する必要があります。ただし、ビュー全体を更新するのは明らかに非効率的です。

method onSomethingHappened(uiObject)
    model.appropriateAttribute = uiObject.value

問題は、次に何をすべきかについてあなたの意見は何ですか? モデル オブジェクトは、値が変更されたときにリスナーに通知するコールバックを実装する必要があります。これにより、次のようなグルー コードを記述できます。

method modelChangedCallback(model, attribute)
    uiObject1.value = model.a
    uiObject2.value = model.a

変更された属性が何であるかを調べて、それに応じて対応する場所はどこですか? これは、ほとんどの場合、Mac 上の Objective-C および Cocoa のモデルです。

それとも、グルーコードに完全に責任を負わせたいですか?

method onSomethingHappened(uiObject)
    model.appropriateAttribute = uiObject.value
    self.updateForAttribute("appropriateAttribute")

これらのアプローチはどちらも、プロジェクトが大きくなると (グルー コードの問題と同様に) 非常に複雑になる可能性があります。他のアプローチがあるかもしれません。どう思いますか?

ご意見ありがとうございます。

4

1 に答える 1

1

私にとっては、行動が必要な場所に帰着すると思います。あなたが説明した状況では、複数のコントロールをプロパティにバインドしているという事実が要件を推進しているため、それをサポートするためにモデルにコードを追加することは意味がありません。

Web ベースのモデルでは、Javascript を使用するとかなり安価に実行できるため、おそらく Web ページにロジックを配置します。そのような余裕がない場合 (つまり、「馬鹿げた」ビューを扱っている場合) は、コントローラーまたはモデル グルー コードで行うのがおそらく理にかなっているでしょう。この種のことが十分に一般的になれば、対処しなければならないボイラープレート コードの量を減らすために、なんらかの形式の汎用ヘルパーを作成するところまで行くかもしれません。

于 2011-06-03T18:24:29.223 に答える