我的困惑,请大家帮忙
数据库中有一张顾客,
字段:ID CHAR(8),NAME VARCHAR(30)
我想设计一个类(数据层)对它进行维护操作,增加、删除、修改,查找
类名 customer
成员变量
CString m_csID;
CString m_csName;
成员函数
AddCust(csID,csNAME)//增加
DelCust(csID)//删除
ModCust(csID,csNAME)//修改
QueryById(csID)//根据ID查找,读到值放在m_csID,m_csName
QueryByName(csName)//根据姓名查找
我的问题是:
1、QueryByName(csName)可能返回多条记录,成员变量显然放不下,那我该怎么解决这个问题?
2、这些成员函数都要访问数据库,是定义一个全局DATABASE对象了,还是在每个成员函数里建立一个局部的DATABASE对象,在调用的时候连接数据库?
1. return a list of customers
2. pass the database object into those functions, for example
BOOL AddCust(const CString& csID, const CString& csName, const CDatabase& db);
是不是Query(const CString& csName,CRecordSet& rsData);rsData是返回的记录集?
大家都这么做吗?我是不是可以定义成员变量:
CStringList m_cslID;
CStringList m_cslName;
或者我定义一个成员变量:
CRecordSet m_rsData;用来保存类返回的数据?可以吗?
第二个问题是因为我看到几篇OOAD入门的文章中的例子,都是在成员函数中进行连接的,我也觉得在成员函数中连接比较不好,比较浪费时间。但为什么那些例子都用在成员函数中进行连接?
一、是的,实际上,你定义的成员变量(CRecordSet m_rsData)就是一个记录集类型的。不建议单独定义成员变量(CStringList m_cslID;CStringList m_cslName;),维护的时候会有麻烦。
二、在成员函数中进行连接较好,实际上不会浪费多少时间,因为许多DBMS都有连接池。分别连接可以提高可靠性和独立性:各人自扫门前雪。如果考虑到其他因素,可以单独定义私有的成员函数用于连接。
SE1 at 2007-10-30 >

下面两种做法哪个更好:
1、在CUSTOMER类里只定义成员变量
CString m_csID;
CString m_csName;
QueryByName(const CString& csName,CRecordSet& rsData);//需要传入一个记录集对象。即查询的结果放在类外部的记录集对象,而不是成员变量中。
2、在CUSTOMER类里只定义成员变量
CRecordSet m_rsData;
QueryByName(const CString& csName);//把结果放在成员变量m_rsData中
to Mubin_Du(穆斌):
你是否是指用一个stateful(数据)和一个stateless(接口)对象表示。
那么定义一个
Customer
{
CString m_csID;
CString m_csName;
}
CustPersist
{
AddCust(const Customer&)//增加
DelCust(csID)//删除
ModCust(csID,const Customer&)//修改
QueryById(csID,Customer&)//根据ID查找,读到值放在m_csID,m_csName
QueryByName(csName,CRecordSet&)//根据姓名查找?
}
这样又多了一个类,是否有什么好处?
有两个stateful类:CRecordSet和Customer,一个stateless类(接口):CustPersist.
上面的定义是否正确?