C# 模型';s图纸信息(坐标、图像等)是否属于MVP模式?
我正在编写一个小的演示应用程序(用于更大项目的概念验证),它将利用C#(.NET4.5)中的被动视图MVP体系结构 无需太多细节,它是一个应用程序,允许您使用拖放工具在大画布上绘制特定流程(类似于Visio),然后我们根据绘制和配置的内容运行模拟 现在,人们在遗留应用程序中所做的是将自定义图像设置到流程节点,因此很容易区分节点或使其看起来更像真实世界的情况 在MVP模式中,节点的位图之类的东西位于何处?很明显,坚持使用模型是很有诱惑力的,但这会打破MVP模式(例如,如果我们只使用命令行界面会怎么样?)。将其作为视图的一部分似乎与底层对象本身太脱节了 另外,作为第二个小问题,对于我所描述的绘图样式应用程序,这些对象视图可能来自C# 模型';s图纸信息(坐标、图像等)是否属于MVP模式?,c#,design-patterns,mvp,C#,Design Patterns,Mvp,我正在编写一个小的演示应用程序(用于更大项目的概念验证),它将利用C#(.NET4.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;
}
}
您关于使用位图和控制台类型应用程序的观点是正确的。但是,我认为节点的位图是节点的一个属性,应该保留在那里 表单/控制台输出通常由具体视图处理。对于MVP的被动视图风格,这不太适合,因为您可能会通过视图界面上的特定方法或属性分配位图。这意味着基于控制台的视图实现将有效地忽略这一点,而对其不做任何处理,我认为这是您不安的地方 从监控控制器的风格来看,问题并没有像将节点交给视图那样明显,然后视图将决定渲染什么,而基于控制台的视图不处理位图。这实际上等同于相同的功能,但以更优雅的方式 因此,我的答案是:保持位图作为节点的属性。如果使用被动视图,则基于具体控制台的视图对位图不起任何作用