0

私はCivilSpanishCodeを保存しようとしています。

それはこのように分けられます:

Books

----Chapters

--------Articles

また

Books

----Titles

--------Chapters

-------------Articles

また

Books

----Titles

--------Chapters

-------------Sections

-----------------Articles

書籍、タイトル、章、セクションには、、、などを格納する必要がありますint identifier。たとえば、一部の書籍には他の書籍よりも多くの章があるため、要素の数は可変です。String with the name of the booktitle

Articles記事の内容と一緒int identifierに保存する必要があります。String

declaration and usage(私にとって)それは少し複雑なので、構造の(データ内、データ外)の例を高く評価します。

4

3 に答える 3

1

このための使用クラスはどうですか?さて、すべてはプリミティブタイプとコンテナだけで実行可能ですが、なぜですか?その場合、はるかに読みにくくなります。

public class Book {
   private int id;
   private List<Chapter> chapters;
   private List<Title> titles;

   // getters/setters/constructor
}

public class Chapter {
   private int id;
   private List<Section> section;
   private List<Article> articles;

   // getters/setters/constructor
}

public class Title {
   private int id;
   private List<Chapter> chapters;

   // getters/setters/constructor
}

public class Section {
   private int id;
   private List<Article> articles;

   // getters/setters/constructor
}

私にとって、それは最も簡単な方法です。Elite Gentlemanのバージョンは少し複雑ですが、一方で、ドメインモデルの変更(新しいタイプの追加または関係の変更)に対してより堅牢です。

于 2012-08-28T09:02:00.690 に答える
0

むしろ、次のようにノードのツリー構造を作成します(これはあなたを助けることができる疑似コードです):

public interface Node {
    public int getId();
    public String getName();

    public void saveTo(SaveVisitor visitor);
}

public abstract class AbstractNode {
    public List<Node> children;

    //Getters
    public List<Node> getChildren() { return children; }

    public void addChild(Node node) {
        if (children == null) {
            children = new ArrayList<Node>();
        }

        children.add(node);
    }

    @Override
    public void saveTo(SaveVisitor visitor) {
        if (visitor != null) {
            visitor.setId(getId());
            visitor.setName(getName());

            if (children != null) {
                for (Node child: children) {
                    child.saveTo(visitor);
                }
            }
        }
    }
}


public class Book extends AbstractNode {

}

public class Title extends AbstractNode {

}

public class Chapter extends AbstractNode {

}

public class Section extends AbstractNode {

}

public class Article extends AbstractNode {

}

、、SaveVisitorを受け入れる任意の訪問者にすることができIDNameサブクラスは任意の形式(XML、JSON、構造化プレーンテキスト、Excelなど)にすることができます。

于 2012-08-28T08:50:01.477 に答える
0

私の推奨はMap<Index, Entry>Entryテキスト(おそらく単純な文字列または類似のもの)であり、座標Indexを格納することです:

class Index {
  public int book, title, chapter, section, article;
}

Index次に、比較可能になるように実装し( equals()/compareTo())、本に移動するためのいくつかのメソッドを提供します( getNextChapter(Index)、、isLastArticle(Index)など)。

これらのヘルパーメソッドを別のクラス(のようなCivilSpanishCodeHandler)に入れて、すべてをクリーンに保つこともできます。

また、aTreeは最も自然な表現であるため、頭に浮かぶでしょう。上記のすべてのヘルパーメソッドをツリーに実装するために、独自のツリー構造をコーディングすることをお勧めします。

于 2012-08-28T08:53:47.917 に答える