Perl 保存树状结构
我有以下树状结构,其中每个级别由单独的类表示:Perl 保存树状结构,perl,persistence,Perl,Persistence,我有以下树状结构,其中每个级别由单独的类表示: Book ------ Page ------ Line 1 n 1 n 每个类都有一个包含其所有成员的属性(例如作为受祝福的引用数组的/g/Book::pages),一些特定于该级别的属性(例如Book::author)以及一些添加/删除其成员的方法 现在我想将所有数据保存/加载到单个文件中。它不会是一个关系数据库(很可能会使用YAML),因此基本上我需要在某个时候得到如下内容: my $book = {
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" },
# ...
]
},
# ...
]
};
书中是否应该有一对聪明的方法了解所有成员类?或者每个类是否应该实现它的一部分,例如,Line::save
返回类似{text=>“Marble”}
正确的方法是什么?我希望解决方案是尽可能少地限制到实际数据。如果我明天决定添加Page::bookmarks
并想保存Bookmark
s怎么办
哦,我正在使用Moose,虽然这不会有太大的区别。如果您正在使用Moose,我建议您查看以处理此问题。您可以在包中使用此模块,然后添加
存储('format'=>'YAML','io'=>'File')代码>
这个简单的例子可以帮助您开始:
package Book;
use Moose;
use MooseX::Storage;
with Storage('format' => 'YAML', 'io' => 'File');
...
1;
my $book = Book->new();
...
# to store object
$book->store('book.yml');
# to get object back
my $book2 = Book->load('book.yml');
如果您使用的是驼鹿,我建议您查看以处理此问题。您可以在包中使用此模块,然后添加存储('format'=>'YAML','io'=>'File')代码>
这个简单的例子可以帮助您开始:
package Book;
use Moose;
use MooseX::Storage;
with Storage('format' => 'YAML', 'io' => 'File');
...
1;
my $book = Book->new();
...
# to store object
$book->store('book.yml');
# to get object back
my $book2 = Book->load('book.yml');
您可以使用Storable
模块序列化和还原祝福对象。您可以使用Storable
模块序列化和还原祝福对象。