繁体   English   中英

MVP模式中模型的图形信息(坐标,图像等)在哪里?

[英]Where does a model's drawing information (coordinates, images etc.) belong in an MVP pattern?

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

关于使用位图和控制台类型的应用程序的观点是正确的。 但是,我认为Node的位图是Node的一个属性,应该保留在那里。

表单/控制台输出通常由具体视图处理。 带有MVP的被动视图风格,这不合适,因为您可能会通过视图界面上的特定方法或属性分配位图。 这意味着基于控制台的视图实现将有效地忽略此操作,并且对此不执行任何操作,我认为这是您不满意的地方。

从监督控制器的角度来看,问题并没有那么明显,就像您将Node交给视图,然后视图将决定呈现什么一样,基于控制台的视图对位图不执行任何操作。 实际上,这等效于相同的功能,但方式更为优美。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM