0

いくつかの動作コードを抽象化する必要があり、これらの動作を呼び出しているクラス内のオブジェクトを参照しようとすると問題が発生します。説明してみましょう。

私の「親」クラスには、 CurrentPageというプロパティがあります。また、 CurrentPageプロパティを変更する動作ロジックもいくつかあります。現在、これは同じクラスで記述されています。私は今、多くの場所でその動作を再利用する必要があるので、それをカプセル化/抽象化して別の...ええと...クラスにしますか??

自分のニーズに合ったデザイン パターンがおそらくあると感じていますが、どれを使用すればよいかわかりません。

誰か助けてくれませんか??

ありがとう、マーク

(私は C#、Silverlight、および MVVM を使用しています。CurrentPageはフィールドではなく通知プロパティであるため、 Ref型として Behavior サブクラスに渡すことはできません)

更新: 要求に応じて追加された例:

class MainApp
{
    public static string CurrentPage { get; set; }

    /// <summary>
    /// Entry point into console application.
    /// </summary>
    static void Main()
    {
        CurrentPage = "Default value";

        Console.WriteLine(CurrentPage);

        DoWork();

        Console.WriteLine(CurrentPage);

        Console.ReadLine();

    }


    private static void DoWork()
    {
        CurrentPage = "A new page";
    }

}

DoWork() を別のクラスに抽出しようとしています。

4

3 に答える 3

3

動作を独自のクラスに抽象化します。次に、委任します。あえて言うなら、これが「戦略」パターンだと思います。

例えば:

class MainApp
{
    ...

    void DoWork()
    {
        CurrentPage = "A new page";
    }
}

次のようになる可能性があります。

class PageModifier
{
    void ModifyCurrentPage(MainApp instance)
    {
        instance.CurrentPage = "A new page";
    }
}

class MainApp
{
    ...
    PageModifier _mod;

    void DoWork()
    {
        _mod.ModifyCurrentPage(this);
    }
}

PageModifier をあらゆる場所で使用できるようになり、動作は 1 つの場所に保持されます。

于 2009-11-11T16:36:40.300 に答える
1

c# はわかりませんが、これはインターフェイス定義に適しているように思えます。ただし、これは通常、定義したい動作の実際の実装を除外することを意味します。

于 2009-11-11T16:38:00.207 に答える
1

ロジックを別のクラスに移動し、関連するメソッドを公開して、必要に応じて初期クラスから呼び出します。通常、サービス メソッドは引数のように、初期クラスのインスタンスを受け取ります。ここではデザイン パターンについて直接説明しているとは思いませんが、デザインの原則について詳しくは、GoF の本をご覧ください。それだけの価値があります。

于 2009-11-11T17:07:26.327 に答える