WEB开发网
开发学院软件开发VC 用命令模式实现对象存储——对象与关系数据库 阅读

用命令模式实现对象存储——对象与关系数据库

 2007-12-30 21:37:31 来源:WEB开发网   
核心提示: 三、编程实现现以图书管理系统的存储部分为例,选择ACCESS数据库,用命令模式实现对象存储——对象与关系数据库(3),ADO数据访问模型,C++语言根据上述理论来实现对象存储,类声明如下:template <class T>class CEntitySet{public:CEn

三、编程实现

现以图书管理系统的存储部分为例,选择ACCESS数据库,ADO数据访问模型,C++语言根据上述理论来实现对象存储。

对象存储由三个核心类来协同完成,分别为CEntitySet(实体集)、CEntity(实体对象)和CStorage(存储管理)。CEntity类是所有实体对象的抽象基类。CStorage类调用数据访问模块(ADO),管理与数据库连接,并向应用系统提供对象存储服务。CEntitySet类是参数模板类,它根据查询条件和对象类型,调用ADO访问数据库并生成需要的实体对象集合,并向应用系统提供对象集合访问服务。

图书管理系统中的对象存储结构如图2所示。

用命令模式实现对象存储——对象与关系数据库

图2:对象存储结构图

CEntitySet类部分实现代码。

CEntitySet类是模板类,其类型参数必须是CEntity类的派生类。类声明如下:

template <class T>
class CEntitySet
{
public:
  CEntitySet(const CString& strName);
  virtual ~CEntitySet(void);
private:
  CString      m_strEntityName;
  CAdoConnection*   m_pConn;
  vector<T*>     m_vecEnt;
  CString      m_strSQL;
public:
……
  BOOL Execute(void); //根据m_strSQL的查询条件,生成符合条件的实体集
  T* operator[](int index) const;
  int GetSize(void) const;
……
};
CEntitySet类声明中Execute()成员函数的实现代码如下:
template <class T>
BOOL CEntitySet<T>::Execute(void)
{
……
  CAdoRecordSet rs(m_pConn);
  if(rs.Open(m_strSQL) == -1)
    return FALSE;
  while(!rs.IsEOF())
  {
    CEntity* pEntity = new T(m_strEntityName);
    ASSERT(pEntity );
    if(pEntity == NULL)
    {
      rs.Close();
      return FALSE;
    }
    if(!pEntity ->Read(&rs))
      break;
    m_vecEnt.push_back(static_cast<T*>(pEntity));
    rs.MoveNext();
  }
  rs.Close();
  return TRUE;
}
四、对象存储模块的使用

CStorage类在应用程序启动时建立并初始化,在应用程序退出前清理。

上一页  1 2 3 4  下一页

Tags:命令 模式 实现

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接