0

私は、WPFキャンバスにいくつかの線と形状を描画し、描画された線に1000と言う多くの点を追加するアプリケーションを持っています。

wpf でのこの非常に広範なキャンバスの描画に適したデザインパターンはどれですか..

MVVM は、この線画と点プロットのためのより良いアプローチですか?

ヘルプ/アイデアは大歓迎です。

よろしく、 Sreekesh NK

4

2 に答える 2

1

形状と線の描画は UI 固有であるため、MVVM ではこれはビューに存在します。

線と形状を永続化する場合は、モデルとビューモデルが関与する可能性がありますが、正直なところ、設計パターンはあなたが求めているものに入っていないようです.

MVVM、MVP、MVC - これらのパターンはすべてエンタープライズ アーキテクチャ パターンです。彼らは、ソリューションのレイヤーとコンポーネントの複合的な内訳に関心を持っており、テストと保守ができるようにそれらを分離しておきます。

キャンバスの描画は、実際には特定のデザイン パターンには当てはまりません。確かにMVVMを使用できますが、描画コンポーネントの特定の実装に影響を与えることはわかりません。

于 2012-05-18T11:25:58.637 に答える
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.

シリアライゼーションを実装する画面の代わりに、別のシリアライゼーション クラスまたはクラス階層を作成し、それを画面の属性として設定する戦略設計パターンの使用を検討することができます。

これを試してから、さらに進んだら、より具体的な質問をしてみてください

于 2012-05-18T11:47:07.287 に答える