C ++ MVC模型 - 应该如何实现?

时间:2009-07-30 14:15:20

标签: c++ model-view-controller

我对模型应如何在我的基本C ++实现中“工作”感到困惑,或者更确切地说,数据库后端的数据应该如何封装/使用。

我现在的想法是一个模型,例如一个静态的findById()方法,它会返回同一个模型的一个实例,然后代表一个“行”数据(允许操作等)是一个合适的方法。

然后就在数据库中创建一个新行而言,我假设将创建一个新的模型实例,填充数据,并且实际上是一个名为?(/ p>的save()方法。

希望我的方法正确,但我对这里的实施/设计感到有些困惑。

非常感谢任何建议。

提前致谢, 詹姆斯

2 个答案:

答案 0 :(得分:4)

所以,我认为你在问什么样的接口适合在关系数据库和面向对象的应用程序之间“翻译”,特别是在用C ++编写的MVC应用程序的上下文中。

一种常见的方法称为对象关系映射,或ORM。我只熟悉Ruby on Rails如何实现ORM,但如果你把它带到C ++,它看起来像这样:

  • 数据库表映射到类
  • 对表(例如查询)的操作映射到相应类的静态成员函数
  • 表中的行对应于相应类的实例
  • 表中的字段对应于相应类
  • 的成员变量

可能有C ++库为您进行ORM映射。我对自己并不熟悉,因为我从来没有在C ++中这样做过。

编辑:This问题询问有关C ++的ORM库。

答案 1 :(得分:1)

第一个建议:“四人帮”一书 - Gamma等人的设计模式。它解释了MVC和其他必要的模式:观察者。

维基百科也可能有所帮助。

基本上:模型代表数据,并且可以操纵它们。这是一堂课。模型必须不知道视图或控制器。它必须有可能在不知道它们的情况下通知其他人(观察者模式,例如qt中的信号)。视图显示数据并对更改做出反应。它注册为模型的观察者,并在大多数情况下知道模型(不需要在那里解耦)。几个视图可能使用相同的模型。对于控制器也是如此。在大多数现代UI上,视图和控制器是紧密耦合的,有时甚至是相同的对象(例如,滑块显示一个值,同时通过移动它来改变它)。

由于历史原因:lern Smalltalk(例如Cincom Smalltalk)。