C# (.NET 4.5) でパッシブ ビュー MVP アーキテクチャを利用する小さなデモ アプリケーション (はるかに大きなプロジェクトの概念実証用) を作成しています。
あまり詳しくは説明しませんが、特定のプロセス (Visio に似ています) をドラッグ アンド ドロップ ツールを使用して大きなキャンバスに描画し、その描画および構成に基づいてシミュレーションを実行できるアプリケーションです。
現在、私たちのレガシー アプリケーションでは、カスタム イメージをプロセス ノードに設定しているため、ノードを区別したり、実際の状況に近づけたりすることが簡単にできます。
ノードのビットマップなどは、MVP パターンのどこに存在しますか? モデルに固執するのは明らかに魅力的ですが、これは MVP パターンを壊してしまいます (たとえば、単にコマンド ライン インターフェースがあればどうなるでしょうか?)。それをビューの一部として持つことは、基礎となるオブジェクト自体から切り離されすぎているように思えます。
また、ちょっとした質問として、私が説明したような描画スタイルのアプリケーションでは、これらのオブジェクト ビューは、または から派生する可能性が高いでしょうUserControl
かCustomControl
? これは、基本的に一部のビットマップだけではかなりのオーバーヘッドのようです。
以下は、非常に単純なモデルとして機能する非常に単純なノードの例です。通常、状態が変化すると、見た目が変わります。つまり、別のビットマップが適用されます。
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;
}
}