0

MVC (モデル、ビュー、およびコントローラー) と同様にコードを分離しています。

2 つのビュー クラスがあるとします。1 つは概念的にはページ (多くのアイテムを含む) で、もう 1 つは単なるウィジェット (最近のニュースのリストなど) です。

これが私がそれを行う方法です:

  1. コントローラーは、ページ クラスとウィジェット クラスの両方をインスタンス化し、ウィジェット オブジェクトをページに渡します。ページにたくさんのウィジェットがある場合、混乱させずにすべてを渡す方法を考え出す必要があります。

    class PageController {
        function foo() {
            Widget widget1 = new Widget();
            Widget widget2 = new Widget();
            Page page = new Page(widget1, widget2);
        }
    }
    
    class Page {
        function Page(Widget widget1, Widget widget2) {
            //do something with the widgets
        }
    }
    
  2. ページはウィジェット クラスをインスタンス化します。しかし現在、ページ クラスは、適切なインターフェイスを備えている限り、ビューをどこにでも配置できるのではなく、あらゆる種類のビューへの参照を持っています。

    class PageController {
        function foo() {
            Page page = new Page();
        }
    }
    
    class Page {
        function Page() {
            Widget widget1 = new Widget();
            Widget widget2 = new Widget();
            //do something with the widgets
        }
    }
    
  3. 他の何か?

あなたのアドバイスとその理由は何ですか?

ありがとうございました。

4

2 に答える 2

1

私は実際、いくつかの点でアプローチ1を支持しています。Page は、ウィジェットの有無にかかわらずインスタンス化できるはずです。ビジネス ロジックとルールを実行する際に、最初にウィジェットのコレクションを追加したり、ページ内の他のプロビジョニングを通じて一度に 1 つずつ追加したりできます。

これにより、ページの構成をより柔軟に変更できます。

ウィジェットには、ウィジェットがどのように機能し、ページのレイアウト内でどのように表示されるかに関する情報が含まれています。

ページは、含まれているウィジェットから情報/指示を取得し、それらを初期化/レンダリングすることのみを担当する必要があります。これにより、より柔軟で流動的な設計が可能になります。

于 2013-03-07T20:33:00.627 に答える
1

Conceptually, #2 makes the most sense to me.

It's perfectly fine to have coupling between views if one type of view contains another. For example, it should be the page's job to manage where to place each widget, when to hide certain widgets etc.

However, the page shouldn't care about events pertaining to those widgets unless it needs to. If a widget has a button, it should just callback to a controller and skip telling the page... unless it causes the widget to be resized and the page needs to lay things out differently.

Hopefully this is useful to you.

于 2013-03-07T20:23:11.190 に答える