用面向对象的序列化代替读写配置文件

经常看有人喜欢自己写一个ConfigFile类,用于读/写 配置文件。
读/写 配置文件是一个非常常见的问题。但是我觉得我们可以从另外一个方向去考虑。
那就是,对象持久化。

如Booch所说,持久化是面向对象的7个要素之一。它是让对象超出作用域后对象的信息
依然存在。说简单点,就是,把对象的信息保存在文件或其它的存储媒体上,并可以在
过后的某个时间,如下次启动应用程序的时候,从文件中读取该对象的信息并恢复该对
象。

今天我在用Boost的serialization库的时候方感其伟大。相对于configure file而言,
这是一个更高层次的抽象。我们可以利用这种模式很方便的代替以往手工读写配置文件
的方式。

举个简单的例子,我们可以把所有的配置信息放在一个struct中,然后写一个
serialize函数,就可以了。不必再去为配置文件分节,把数值写成key-value的形式。
所要的仅仅是利用 operator<<和operator>>对流进行串行化操作。

而且,文件可以是文本格式的,也可以是XML格式的,如果我们希望,还可以存在数据
库中。

另外,我在想,如果我们可以很方便的把对象序列化为json data的格式。那么就可以
用之代替soap,把浏览器作为一个轻量级的web service客户端,相比于XML,客户端的处
理将会更高效。

说到底,面向对象的核心就是层次化的抽象。例如此处,无论数据最终被存在哪里以什
么样的格式,serialize函数是不会变的。而且,使用这个对象的人也不必去关心它是
如何被序列化的,只管用就好了。

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥