2

Composite Design PatternAsp.net MVC3 アーキテクチャを使用してツリー構造を実装する方法については、疑問があります。私の懸念は主に、ツリー構造にレベルごとに異なる属性またはプロパティを持つノードがあるという要件によるものです。

次に例を示します。

ツリーにはルート ノードがあります -T属性/プロパティがありますX, Y ,Z(便宜上参照XできますName) 対応する子ノード A 、 B にはプロパティがあります -X, L, M 対応する次のレベルのノードにはプロパティがあります -X, P, Q 対応する次のノードにはプロパティがあります -X, R, Tなど。

現在のデザインはパターンで開発されておらず、レベルごとにクラス タイプが異なります。

したがって、レベルを追加したり変更したりする場合、依存クラスがあるため、クラス全体に影響します。

これらのタイプの依存関係とコードのメンテナンスが容易になるように、複合設計パターンを適用できるかどうか教えてください。このようなシナリオで複合パターンに従うには、POCO またはモデルをどのように定義する必要がありますか。私はAsp.net MVC3、C#、DBの最初のアプローチをNICedit.jsで使用しています(ツリー構造表示用)。

事前に助けに感謝します。

4

1 に答える 1

1

Composite pattern、ノードにアクセスし、そのタイプを気にしない場合によく使用されます。どのようにノードにアクセスしていますか? あなたは彼らと何をしていますか?あなたの目標は、メンテナンスを改善することです。このパターンは、各ノードを同じオブジェクトとして扱う必要がある場合にのみ適用されます。

次のコードのようなものを試してください。

public interface IMyNode
{
    void Print();
}


public class A : IMyNode
{
    public void Print()
    {
        Console.WriteLine("I am a child of T. A or B");
    }
}

public class C : IMyNode
{
    public void Print()
    {
        Console.WriteLine("I am a child of A or B, I am C.");
    }
}

public class D : IMyNode
{
    public void Print()
    {
        Console.WriteLine("I am a child of C. I am D.");
    }
}

public class CompositeMyNode : IMyNode
{
    private readonly List<IMyNode> nodes;

    public CompositeMyNode()
    {
        nodes= new List<IMyNode>();
    }

    public void Add(IMyNode node)
    {
        nodes.Add(node);
    }

    public void AddRange(params IMyNode[] node)
    {
        nodes.AddRange(node);
    }

    public void Delete(IMyNode node)
    {
        nodes.Remove(node);
    }

    public void Print()
    {
        foreach (IMyNode childMyNode in nodes)
        {
            childMyNode.Print();
        }
    }
}

この場合、実際にどのノードを持っているかを気にせずに、各ノードの情報をプライティングしています。

var compositeMyNode = new CompositeMyNode();
var compositeMyNode1 = new CompositeMyNode();
var compositeMyNode2 = new CompositeMyNode();

compositeMyNode1.Add(new A());

compositeMyNode2.AddRange(new A(), new A());

compositeMyNode.AddRange(new C(), compositeMyNode1, compositeMyNode2);

// Will print 4 nodes: A, A, A, C.
compositeMyNode.Print();

ウィキペディアの記事からの例。複合設計パターンのその他の例と説明については、このスタックオーバーフローの質問も参照してください。

于 2013-08-19T07:39:09.613 に答える