哪种设计模式适合WPF中的Canvas绘图

时间:2012-05-18 08:17:15

标签: design-patterns canvas drawing

我确实有一个应用程序可以处理在WPF Canvas上绘制一些线条和形状,并在绘制的线条上添加许多点数1000。

哪种设计模式适合在wpf中使用这种高度广泛的画布。

MVVM是否适合这种绘图和点绘图的东西?

非常感谢任何帮助/想法。

此致 Sreekesh NK

2 个答案:

答案 0 :(得分:1)

形状和线条图是特定于UI的,因此在MVVM中,它将存在于视图中。

如果你坚持使用线条和形状,那么也许模型和ViewModel会参与其中,但说实话,设计模式似乎并不符合你的要求。

MVVM,MVP,MVC - 所有这些模式都是企业架构模式。他们关注的是解决方案层和组件的复合分解,将它们分开,以便对它们进行测试和维护。

画布绘图并不属于特定的设计模式。当然你可以使用MVVM,但我看不出这会影响你对绘图组件的具体实现。

答案 1 :(得分:0)

以下是您可以考虑使用的设计的基本概述:

(我是一个C ++人,但我想你会明白这个想法)

class ScreenBase
{
public:
    // define abstract operations here, may consider different return types
    // These may be Template Patterns depending
    // if there is common stuff to all screens
    virtual void drawLine(/* appropriate params here*/) = 0;
    virtual void dragLine(/* appropriate params here*/) = 0;
    virtual void deleteLine(/* appropriate params here*/) = 0;
    // more common operations

    // Use a Template pattern if there is common screen
    // serialization stuff, else just define it as abstract
    void serialize() {
        // do common stuff here
        doSynchronize();
        // do more common stuff here
    }

    virtual void doSynchronize(/* appropriate params here*/) = 0;
    ...

private:
    // store the drawing shapes here appropriately
};

class Screen1 : public ScreenBase
{
public:
    // concrete operation implementations
    virtual void drawLine(/* appropriate params here*/);
    virtual void dragLine(/* appropriate params here*/);
    virtual void deleteLine(/* appropriate params here*/);
    virtual void doSerialize() { ... }

    // concrete specifics here
};

// class Screen2 : public ScreenBase

// class Screen3 : public ScreenBase

// I dont know the Microsoft stuff, the shapes should be
// defined in WPF, So we wont need to define anything here.

您可以考虑使用Stategy Design模式而不是屏幕实现序列化,这可以创建单独的序列化类或类层次结构,并将其设置为屏幕上的属性

尝试这一点,然后随着你的进步,尝试提出更具体的问题