我的英语不够好,无法解释我的问题。但我会尽力而为。
我曾经是一名 Java 程序员,但使用 C++ 已经一年多了。一直困扰我的一件事是从网络(如通过 SNMP、Web 服务或其他数据源...)创建业务对象并将其保存到数据库并在应用程序启动时加载它的策略。通常我的设计如下:
class Object{
/* this is just a demonstration, in real code, there are all kinds of Object and has relationships*/
friend class DBConnection;
friend class SNMPConn
private:
std::string& m_strName;
//... all kinds of properties
}
class DBConnection
{
int load(Object& obj);
int save(Object& obj);
int modify(Object& obj);
int loadAll(std::vector);
}
class SNMPConn
{
int load(Object& obj);
...
}
我不太适应的是“ friend 类......”这句话。它打破了封装。我找到了一些框架,如 litesql(sourceforge.net/apps/trac/litesql) 和其他商业框架,但这些框架很难与我现有的代码集成。我正在尝试手动完成并尝试为此类工作找到通用策略。
我是一个 Java 开发者,C++ 设计是我不擅长的事情。我不知道这种设计工作的最佳实践是什么。
最佳答案
据我从这个问题(在读取和写入 DB 或 SNMP 连接时破坏封装)了解到,首先你需要一个适当的设计来消除这些“ friend ”。请为连接(即 IDBConnection)和持久对象(即 IPersistent)定义一个抽象类。您可以使用“抽象工厂”模式来创建它们。此外,将加载和保存方法隔离到另一个类,并使用“访问者模式”从数据库初始化对象或将对象保存到数据库。
还有一点,如果您的应用程序需要嵌入式数据库,请使用 SQLite有很多好的 C++ 包装器。希望对你有帮助
关于C++ 对象设计问题 : efficiently and safely construct objects and save/load with database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2646417/