2011-02-03 10 views
1

私の質問は、可変深度階層を最適に作成する方法に関するものです。 カテゴリ階層に商品を置くことができるようにしたいとしましょうが、階層の深度は商品ごとに異なります。可変深度カテゴリを作成する最良の方法は?

例えば、FerrariはVehicle - > Car - > Sports のカテゴリーに属していますが、LED 3DテレビはElectronics - > TV - > LED - > 3Dにあります。

うまくいけば:-) これをモデル化するにはどうすればよいでしょうか?現在のオブジェクトが葉ノードであるかどうかを示すブール値属性を含む、自身のListを保持できるCategoryオブジェクトを作成する必要がありますか?その他の提案?

私の階層の固定された深さを持つことは本当に難しいですか?

答えて

2

カテゴリを表すモデルはツリー(目に見えないルートノード、「開始」など)である可能性があります。各カテゴリには、1つの親カテゴリと1つまたは複数の子カテゴリがあります。

次に、製品について、その製品にカテゴリのリストを追加します。ある種の商品を異なるカテゴリに掲載することをいつか考えるかもしれないので、これは非常に柔軟です。カテゴリクラスの


非常に基本的なモデル:そこは作ることができる選択肢の数がありますが、私は彼らのカテゴリを知って

class Product 
{ 
    private Category category; 
    // ... 
} 

class Category 
{ 
    private Category parent; 
    private String name; 

    public Category getParent() { return parent; } 
    public boolean isTopLevelCategory() { return parent == null } 

    public String getName() { return name; } 

    public String getFullName() { 
     if(isTopLevelCategory()) 
      return name; 
     else 
      return parent.getFullName() + " -> " + name; 
    } 

    // .... 
} 

製品のようなものを持っているでしょう

public class Category { 

    private List<Category> children = new ArrayList<Category>(); 
    private Category parent; 
    private String name; 

    // private constructor 
    private Category(Category parent, String name) { 
    this.parent = parent; 
    this.name = name; 
    } 

    // adds a category to this category 
    public Category addCategory(String name) { 
    Category child = new Category(this, name); 
    children.add(child); 
    return child; 
    } 

    // creates and returns a new categories tree 
    public static Category createCategories() { 
    return new Category(null, "root"); 
    } 
} 
+0

これは、私が心に留めていたものとよく似ていますが、コードではかなり落ち着くことはできませんでした。初心者の方には、このアプローチをお勧めします:-)あなたの答えをありがとう! – Daniel

0

(最も特定のレベル - フェラーリは「スポーツ」にある)

カテゴリは親を知っているので、「Sp 「車」は「車」を指し、「車」は最上位のカテゴリを指すので、「車両」を指す。

このように格納する必要がある場合は、これもSQLデータベースにマップされます。

利用可能なすべてのカテゴリのリストを保存する方法を決定する必要があります。

また、最上位のカテゴリからすべての子になる必要がある場合は、それらの逆リンクも保存することをお勧めします。

0

Categoryオブジェクトでのあなたの提案は私には聞こえます。 composite patternはよく一致します。

また、製品とカテゴリ階層を切り離すためのAndreas_Dのアイデアが気に入っています。

関連する問題