我正在编写一个小型演示应用程序(用于更大项目的概念证明),它将利用 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;
}
}