0

C# (.NET 4.5) でパッシブ ビュー MVP アーキテクチャを利用する小さなデモ アプリケーション (はるかに大きなプロジェクトの概念実証用) を作成しています。

あまり詳しくは説明しませんが、特定のプロセス (Visio に似ています) をドラッグ アンド ドロップ ツールを使用して大きなキャンバスに描画し、その描画および構成に基づいてシミュレーションを実行できるアプリケーションです。

現在、私たちのレガシー アプリケーションでは、カスタム イメージをプロセス ノードに設定しているため、ノードを区別したり、実際の状況に近づけたりすることが簡単にできます。

ノードのビットマップなどは、MVP パターンのどこに存在しますか? モデルに固執するのは明らかに魅力的ですが、これは MVP パターンを壊してしまいます (たとえば、単にコマンド ライン インターフェースがあればどうなるでしょうか?)。それをビューの一部として持つことは、基礎となるオブジェクト自体から切り離されすぎているように思えます。

また、ちょっとした質問として、私が説明したような描画スタイルのアプリケーションでは、これらのオブジェクト ビューは、または から派生する可能性が高いでしょうUserControlCustomControl? これは、基本的に一部のビットマップだけではかなりのオーバーヘッドのようです。

以下は、非常に単純なモデルとして機能する非常に単純なノードの例です。通常、状態が変化すると、見た目が変わります。つまり、別のビットマップが適用されます。

public enum NodeStates{ Idle, Working, Broken, ResourceStarved, Blocked };

public class Node: ModelBase
{
    private string _username;
    private NodeStates _currentState;

    public Node(string username)
    {
        _username = username;
        _currentState = NodeStates.Idle;
    }

    public string Username
    {
        get
        {
            return _username;
        }

        set
        {
            if (_username != value)
            {
                _username = value;
                NotifyChanged();
            }
        }
    }

    public NodeStates CurrentState
    {
        get
        {
            return _currentState;
        }

        private set
        {
            if (_currentState != value)
            {
                _currentState = value;
                NotifyChanged();
            }
        }
    }

    public void DoWork()
    {
        CurrentState = NodeStates.Working;
        //Todo, schedule work complete time
    }

    public void WorkComplete()
    {
        CurrentState = NodeStates.Idle;
    }   
}
4

1 に答える 1

0

ビットマップとコンソールタイプのアプリケーションの使用に関するあなたの指摘は有効です。ただし、ノードのビットマップはノードの属性であり、そのままにしておく必要があると私は主張します。

フォーム/コンソール出力は通常、具象ビューによって処理されます。MVP のパッシブ ビュー フレーバーでは、おそらくビュー インターフェースの特定のメソッドまたはプロパティを介してビットマップを割り当てるため、これはうまく適合しません。これは、ビューのコンソールベースの実装がこれを効果的に無視し、それに対して何もしないことを意味します。これがあなたの不安が生じるところだと思います.

監視コントローラーのフレーバーを見ると、ノードをビューに渡し、コンソールベースのビューがビットマップで何もせずに何をレンダリングするかをビューが決定するので、問題はそれほど顕著ではありません。これは事実上、同じ機能と同等ですが、より優雅な方法です。

したがって、私の答えは、ビットマップをノードの属性として保持することです。パッシブ ビューを使用する場合、具体的なコンソール ベースのビューはビットマップに対して何も行いません。

于 2013-06-12T08:58:14.950 に答える