0

我正在尝试存储西班牙民法典。

它是这样划分的:

Books

----Chapters

--------Articles

或者

Books

----Titles

--------Chapters

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

或者

Books

----Titles

--------Chapters

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

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

书籍、标题、章节和章节必须存储 anint identifier和 a String with the name of the book,title等。元素的数量是可变的,因为例如,有些书籍的章节比其他书籍多。

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
}

对我来说这是最简单的方法。The 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可以是任何接受ID,的访问者Name,并且子类可以是任何格式(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)等)

您还可以将这些辅助方法放入一个单独的类(如 a CivilSpanishCodeHandler)中以保持其干净。

此外,aTree会浮现在脑海中,因为它是最自然的表示。尽管我建议您编写自己的树结构以将上述所有辅助方法实现到树中。

于 2012-08-28T08:53:47.917 回答