我有以下树状结构,其中每个级别都由单独的类表示:
Book ------ Page ------ Line
1 n 1 n
每个类都有一个属性来保存它的所有成员(例如/g/ Book::pages
,作为祝福引用的数组),一些特定于级别的属性(例如Book::author
)以及一些添加/删除其成员的方法。
现在我想将所有数据保存/加载到单个文件中。它不会是一个关系数据库(很可能会使用 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 中是否应该有一对智能方法知道所有成员类?或者每个类是否应该实现它的一部分,以便例如Line::save
返回类似的东西{ text => "Marble" }
?
实现这一点的正确方法是什么?我想要尽可能不受实际数据限制的解决方案。如果我决定明天添加Page::bookmarks
并想保存Bookmark
s 怎么办?
哦,我正在使用 Moose,尽管这应该没什么区别。