Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 模型';s图纸信息(坐标、图像等)是否属于MVP模式?_C#_Design Patterns_Mvp - Fatal编程技术网

C# 模型';s图纸信息(坐标、图像等)是否属于MVP模式?

C# 模型';s图纸信息(坐标、图像等)是否属于MVP模式?,c#,design-patterns,mvp,C#,Design Patterns,Mvp,我正在编写一个小的演示应用程序(用于更大项目的概念验证),它将利用C#(.NET4.5)中的被动视图MVP体系结构 无需太多细节,它是一个应用程序,允许您使用拖放工具在大画布上绘制特定流程(类似于Visio),然后我们根据绘制和配置的内容运行模拟 现在,人们在遗留应用程序中所做的是将自定义图像设置到流程节点,因此很容易区分节点或使其看起来更像真实世界的情况 在MVP模式中,节点的位图之类的东西位于何处?很明显,坚持使用模型是很有诱惑力的,但这会打破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的被动视图风格,这不太适合,因为您可能会通过视图界面上的特定方法或属性分配位图。这意味着基于控制台的视图实现将有效地忽略这一点,而对其不做任何处理,我认为这是您不安的地方

从监控控制器的风格来看,问题并没有像将节点交给视图那样明显,然后视图将决定渲染什么,而基于控制台的视图不处理位图。这实际上等同于相同的功能,但以更优雅的方式

因此,我的答案是:保持位图作为节点的属性。如果使用被动视图,则基于具体控制台的视图对位图不起任何作用