用不到140行C-sharp代码开发面向对象的数据库(下篇)

开发者在线 Builder.com.cn 更新时间:2007-03-02作者:builder.com.cn 来源:

本文关键词: ZachSmith CSHARP csharp C# c# C#

用不到140行C-sharp代码开发面向对象的数据库(上篇)

体系结构

在开始深入代码的细节之前,我们需要看看我们的解决方案背后的体系结构。其基本的体系结构由两个类和一个接口构成:

类:

  • XmlDBState ——这是一个抽象类,包括数据库所需要的所有功能。其中有搜索、保存、删除,以及文件管理/创建功能。
  • XmlDBBase——这是一个公共类,专门用作要被保存到数据库里的对象的基类。虽然我们并不要求对象继承自这个类,但是继承自XmlDBBase会自动地实现IxmlSerializable接口并保存编码时间。

接口

  • IXmlSerializable——任何要被保存到数据库里的对象都必须实现这个接口。正如上面所提到的,如果一个对象继承自XmlDBBase,那么它就已经实现了这个接口,因此把对象保存到数据库里不需要采取进一步的操作。

既然已经搭好了基本的体系结构,我们就可以开始研究源代码,看看这个数据库是如何工作的了。

加载数据库

下面的XML(列表A)是在数据库被写入磁盘时的样子,仅供参考:

列表A

<Database>
  <XmlDB.Order>
    <Order xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Identity>76a0558b-a8c7-42e3-8f1d-c56319365787</Identity>
      <CustomerIdentity>6f5e9a2b-b68f-4b6d-9298-fbe5f135dd25</CustomerIdentity>
      <DatePlaced>2006-11-21T07:12:16.3176493-05:00</DatePlaced>
    </Order>
    <Order xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Identity>16d8f0b8-46c6-47c3-ac6b-a0b0e0852970</Identity>
      <CustomerIdentity>61cf2db4-0071-4380-83df-65a102d82ff2</CustomerIdentity>
      <DatePlaced>2006-11-21T07:12:26.0533326-05:00</DatePlaced>
    </Order>
  </XmlDB.Order>
  <XmlDB.Customer>
    <Customer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Identity>6f5e9a2b-b68f-4b6d-9298-fbe5f135dd25</Identity>
      <LastName>Cunningham</LastName>
      <FirstName>Marty</FirstName>
    </Customer>
    <Customer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Identity>61cf2db4-0071-4380-83df-65a102d82ff2</Identity>
      <LastName>Smith</LastName>
      <FirstName>Zach</FirstName>
    </Customer>
  </XmlDB.Customer>
</Database>

在本文的示例里,有两个客户和两个订单被保存在数据库里。保存在数据库的每个对象类型都被包含在一个节点里,这个节点专门用于特定类型的对象。例如,DatabaseXmlDB.Order (Database[namespace].[type])节点就包含有所有已经被保存的Order(订单)对象。

在每个专用的类型节点里都有保存序列化对象的对象节点。列表B就是这样一个例子。

用户评论

  • 用户名
  • 评论内容