/note/tech

UI出力を前提とする木構造データならJSON(など)で静的に定義してDBに保存すればよい

...のでは?

UI出力を前提とする木構造データというのは、アプリケーションのメニューや商品カテゴリーなどのようにUI上で木構造のリストとして表現されるデータを指す。

UI表示に利用されるだけであることが明らかである[1]なら、わざわざ面倒臭い木構造を頑張ってRDBで実現する価値は低いし、保守性も下がる[2]。

UI出力に利用されるだけであるなら、それに必要な構造を直接JSON[3][4]で定義し、そのJSONをアプリケーションに読み込んでもらえば目的は達成できる。

JSONを編集するのが面倒なことは予想できるが、それでは隣接データモデルや閉包データモデルのデータをメンテナンスするのとどちらが大変なのか? と考えた時、労力はどちらもさほど変わらないのではという感じはあるし、テキストエディタでする場合、構文チェックなどのサポートが得られる点で多少はJSONに分があるのではなかろうか。

JSONのサイズが巨大(メモリに乗せるのが難しいサイズ)になったらどうするのだという話もあるが、UI表示が前提であるならそもそもそんな馬鹿げたサイズにはならないことが期待できる。また、仮にJSONが巨大化してしまった場合も大抵の言語にはストリーム方式でデータを読み込むライブラリぐらい存在するだろう(希望的観測)。

そのように考えると、データ処理を行う上で木構造であることが重要なデータ[5]なら仕方ないとしても、単にUIに表示するためだけに木構造を実装するのは割に合わないのではないか? JSONで木構造を定義してそれを返却すれば要件を満たせる場合もあるのではないだろうか? という事を考えた。

脚注

Appendix: サンプルJSON

JSONで書くとこんな感じだろうか? 頻繁に更新するのは面倒くさそうだ。

item_tree = [{
    id:xxx,
    name:xxx,
    child: [{
        id:xxx,
        name:xxx,
        child: [{
            id:xxx,
            name:xxx,
            child: [{
                id:xxx,
                name:xxx,
                child: []
            }]
        }],
        {
            id:xxx,
            name:xxx,
            child: [...]
        }],
    }],
}]