听说数据和GUI分开比较好。例如,我有一些数据。它是分层的,具有抽象基类和具体类型的派生类,例如
class Data {};
class ConcreteDataA : public Data {};
class ConcreteDataB : public Data {};
我也有它的分层 GUI(例如对话框)
class DataDialog {};
class ConcreteDataADialog : public DataDialog {};
class ConcreteDataBDilaog : public DataDialog {};
我想从数据对象创建一个数据对话框对象。如果数据对象是ConcreteDataA,则创建ConcreteDataADialog,如果是B,则创建B对话框。有一种简单的方法可以通过在类 Data 中添加一个虚函数来做到这一点,例如
virtual DataDialog* CreateDialog()
但是如果我在数据类中添加这个函数。它似乎违反了数据/GUI分离原则。第二种方式是构建一个全局的CreateDialog函数,根据数据对象的dynamic_cast类型创建对话框。这种方式对许多 maual ifs 也不利。还有其他实现方式吗?还是在实践中,第一种方式也可以?非常感谢!
我的一位朋友告诉我使用反射。我认为这应该有效。