对象将自身存储到DataBase

时间:2017-06-27 11:39:57

标签: c++ database qt

我是C ++和Qt的新手,我正在开发一个简单的应用程序,用于在数据库中存储和获取不同类型的员工。我实现了一个层次结构,Employee是基类,然后我有三个不同的子类:Monthly_Paid_Employee,Hourly_Paid_Employee和Salesman。

我的同事告诉我,一个好的解决方案是使用c ++多态:基类(Employee)有一个虚方法,子类实现该方法,所以你可以使用指向基类的指针来管理所有的实例像下一个代码中的子类:

Employee *e = new Salesman(name, salary, etc..);
e->insert();

这是一个很好的解决方案吗?我问这是因为在大学里,老师告诉我DAO模式更好,以便将DataBase的东西放在一起。 DAO类的问题是我必须将Employee实例强制转换为子类,从而失去了很大的灵活性。使用我的同事的解决方案代码就是一切,但是我会在很多类中分散很多代码,但是我有更多的灵活性。哪一个是最好的方法?

如果有更好的解决方案,我很乐意知道。

1 个答案:

答案 0 :(得分:1)

我不确定如果我理解你的问题,但我会像你的同事推荐的那样使用多态性。这并不一定意味着DAO责任必须分散在您的计划中。

例如为: 在原始方法中,DAO类可以使用静态方法来存储不同类型的员工

static void StoreEmplyee(...) {...}
static void StoreSalesmen(...) {...}

然后从子类中通过从DOA类调用正确的函数来覆盖插入函数。

class Salesman(...) {
//...
void insert() override {
DOA::insertSalesman(this);
}
};

这样作为责任的数据库处理仍然存在于DOA类中,但是您具有从多态性中获得的灵活性。

另一个建议:由于'11标准C ++提供智能指针 - 我会使用它们。