各レベルが個別のクラスで表される次のツリーのような構造があります。
Book ------ Page ------ Line
1 n 1 n
Book::pages
各クラスには、すべてのメンバーを保持するプロパティ (祝福された参照の配列としての/g/など)、レベルに固有のプロパティ ( などBook::author
)、およびメンバーを追加/削除するためのメソッドがあります。
ここで、すべてのデータを単一のファイルに保存/ロードしたいと考えています。リレーショナル DB にはならない (ほとんどの場合 YAML が使用される) ため、基本的にある時点で取得する必要があるのは次のようなものです。
my $book = {
author => "Fred Flinstone",
name => "My Favorite Stones",
pages => [
{
number => 1,
footer => "Dedicated to Wilma",
lines => [ ],
},
{
number => 2,
lines => [
{ text => "Preface", style => "h1" },
{ text => "This book is about my favorite stones:" },
{ text => "Marble" },
# ...
]
},
# ...
]
};
Book には、すべてのメンバー クラスを認識できるスマートなメソッドのペアが 1 つあるべきでしょうか? または、各クラスはその一部を実装して、たとえばLine::save
次のようなものを返す必要があり{ text => "Marble" }
ますか?
これを実装する正しい方法は何ですか? 可能な限り実際のデータに限定されたソリューションが必要です。明日追加することに決め、 s もPage::bookmarks
保存したい場合はどうすればBookmark
よいですか?
ああ、私は Moose を使用していますが、大きな違いはありません。