JavaのWebアプリケーション開発フレームワークによる、Webサイト開発の顛末記です。

EclipseのMavenを使った、Spring-MVC、Thymeleaf、MyBatis 等のプログラミングテクニックを、
備忘録的に記録しています。実際に動くソースコードを多用して説明していますので、
これからEclipseや、Spring-MVCを始めたいと思っている人にとって、少しでも参考になれば幸いです。
■応用の森 階層構造Tree 生物分類データ構造
まず最初に、ツリー表現を実装するためのデータを考えてみます。
今回は私の趣味で、生物の分類階層をツリー表現してみることにします。
生物の分類は、おおまかには、「界」-「門」-「綱」-「目」-「科」-「属」-「種」
という階層で分類されます。(実際はもっと複雑ですが)
人間(ホモ・サピエンス)を例にとると、
(真核生物)-動物界-脊索動物門-哺乳綱-霊長目-ヒト科-ヒト属-ヒト
のように分類されます。(厳密にはさらに細かく複雑な階層ですが簡素化)
全ての生物は、この分類木のどこかに属しているため、
生物分類階層をプログラムでツリー表現しやすいようなデータベースのデータ構造を考えてみます。
今回実装する分類階層テーブル構造は以下の様になります。

今回使用するテーブルは1個だけで、テーブル構成は以下のようになっています。
CREATE TABLE tblClass (
 code varchar(32),       /* 分類コード */
 rute varchar(16),       /* ノード経路 */
  PRIMARY KEY(code,rute),
 parent varchar(32),      /* 親分類コード */
 name varchar(128),      /* 分類名称 */
 level int4,           /* 分類レベル */
 serialno int4,         /* シリアル番号 */
 leaf char(1) default '0',    /* ノード末端判定 */
 delflag boolean default false /* 論理削除フラグ */
);
※)ただし、上の分類木でいう「種」はデータ構造が他の分類と異なるため
  今回表現するのは、上の分類木でいう「属」までとします。

以下に、人間(ヒト)の分類を例にとって、データ構造を表してみます。
ヒトの分類階層
一番トップレベルのノードの code は 'root' となっており、
ノードの子のレコードの parent には、自分の親の code を保持しています。
つまり、自分の子を探すには、自分のcodeを parentに持っているレコードを探せば
子が見つけられるという、レコード構造です。

 

データ構造のイメージが湧いたところで、恒例のプログラム計画マップです。
TreeView計画マップ図
上のマップ図から、プログラム設計書を起こしてみます。(これまでに出現している汎用クラスは、一部割愛しています)
TreeViewプログラム設計書
いつも通りの、コントローラ/ビジネスロジック/FormBean/DTO/Mapperそれとviewの定型的な組み合わせです。

 

それでは、次ページでそれぞれの役割の説明をします。