分类: C/C++
2008-08-04 09:37:09
m_Storage.SetConnString("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Book.mdb"); if(!m_Storage.Initialize() MessageBox("存储系统初始化失败!"); //借书功能测试 CBorrowBook borrowbook; //借书类与图书类之间的关联视图 CBorrow borrow; //借书类 borrowbook.SetBookNumber("10001"); if(!m_Storage.ReadEntity(&borrowbook)) break; borrow. SetPersonName(borrowbook.GetPersonName()); borrow. SetBorrowDate(borrowbook.GetPersonName()); if(m_Storage.SaveEntity(&borrow)) MessageBox("借书成功"); ……//查找书价>90元的图书 CEntitySetbooks("book"); books.SetConn(m_Storage.GetConn()); CBook* pBook = NULL; books.SetSQLString("price>90"); books.Execute(); int count = books.GetSize(); m_ListCtrl.DeleteAllItems(); //列表视图控制 for(int index = 0; index < count; index ) { pBook = books[index]; m_ListCtrl.InsertItem(index, pBook->GetBookNumber()); …… }
五、总结
从上面的设计和源程序中可以看出,CStorage类和CEntitySet类并没有访问和操纵数据库记录集,数据库的存取操作实际上由实体对象来完成,这样对于不同的实体对象和数据表结构,系统都可以正常工作,且即使增加新的实体对象也不会影响模块本身结构的稳定性。
实体对象是对应用域中概念的描述,它只应该向外提供属性(或字段)赋值与读取操作,其数据库操作接口应声明为私有成员,不应该向应用系统提供。为了保证CStorage类和CEntitySet类可以向数据库存取实体对象,本模块根据C 多态特性,在这两个类中用指向CEntity类的指针来调用实体对象的存取接口,这样在实体对象将数据库存取接口声明为私有成员后,整个模块仍能正常工作。
六、附注