65.9K
CodeProject 正在变化。 阅读更多。
Home

手持 Basic (HB++) 的对象映射

starIconstarIconstarIconemptyStarIconemptyStarIcon

3.00/5 (2投票s)

2007 年 8 月 22 日

CPOL

2分钟阅读

viewsIcon

26948

downloadIcon

79

为 HB++ 创建数据访问层和业务对象。

引言

本文将展示如何对 HB++ 数据库表进行一些基本的对象映射。整个过程将允许您创建一个简单的数据访问层(针对单个表)和两个业务对象,一个业务实体以及该业务实体的集合。

背景

对象映射已经存在一段时间了,您可以在几乎任何可用的计算平台上找到它。虽然最初的对象映射器或 O/R 映射器出现在 Java© 中,但您几乎可以在任何编程语言中找到对象映射器。对象映射器的基本原理非常简单,可以概括为以下步骤:分析数据库模式并检索表、关系、索引等信息,通常称为元数据。一旦映射器收集到所有这些信息,它就会继续创建一些类。首先是数据访问类(将它们视为数据库和业务类之间的接口),然后是业务类(将这些类视为应用程序用于执行所有操作和任务的类)。

Using the Code

图 1 中的类图显示了类的实现方式。AddressDACL 类继承自 Recordset(在本例中为 Address 表),因此将继承 recordset 中的所有属性和方法,以及我们类可能实现的任何方法。在本例中,AddressDALC 将实现图表中显示的方法。AddressEntity 类代表我们将要在应用程序中使用的业务对象。它包含映射表中字段的属性。它还包含一些允许访问数据层的方法,使用 AddressDALCAddressCollection 类是 Address 实体的集合,并提供集合所需的所有方法。

Screenshot - ClassDiagram2.png
图 1. 类图

因此,如果要在代码中使用我们的类,它会像这样

dim myAddress as AddressEntity

Private Sub Test()
Try
    'Create Address and save it
    set myAddress = new AddressEntity 
        
    myAddress.StreetAddress= "1 Short Street"
    myAddress.Suburb="Little Town"
    myAddress.Postcode="8900"
    myAddress.Address_Save       
        
    'Load it to check it out
    myAddress.Address_Load(1)
    msgbox(myAddress.StreetAddress & chr(10) & myAddress.Suburb)
        
    'Now Update it
    myAddress.Suburb = "Justa Town"
    myAddress.Address_Save 
        
    'Load it to check changes
    myAddress.Address_Load(1)
    msgbox(myAddress.StreetAddress & chr(10) & myAddress.Suburb)        

Catch
    MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure Test"
End Catch

End Sub

可以看出,示例代码变得更加简单易读。

关注点

使用对象映射的主要优点是代码变得简单且更易于维护。随着应用程序变得更大且数据访问更复杂,对象映射的好处会更加明显。

对象映射的主要缺点也很明显:一遍又一遍地编写非常相似的代码。子类化消除了大部分重复代码,但所有 DALC 类型类都应实现基本的 CRUD 方法。代码生成器通常简化了使用对象映射创建类。有很多这样的应用程序适用于不同的平台,但不幸的是,没有适用于 Palm OS© 的。我的下一篇文章将重点介绍此类工具的设计和实现,以便我们可以自动将对象映射应用于 HB++ 应用程序。

历史

  • 2007 年 8 月 21 日:初始发布
© . All rights reserved.