【发布时间】:2012-07-11 16:49:36
【问题描述】:
我在制作 Django 应用程序时遇到了某种困境,但我认为我遇到的问题可能普遍适用于 MVC 模式。我正在制作一个Question 模型,可用于构建测验或问卷。 Question 基类将是一个简单的免费回答问题。我想支持不同类型的问题,例如多项选择题或滑动比例题,这些将是 Question 基类的子类,并添加了额外的字段,例如一系列可能的选择。我希望将来能够扩展我的问题模型以支持更多类型的问题,为此我可以依赖多态性并在模型层和视图层之间为所有子类传递Question 类型的对象Question.
我遇到的问题是视图必须知道它收到的问题类型才能呈现它。如果它得到一个多项选择问题,它需要绘制单选小部件等。所以现在如果我用更多类型的问题扩展我的模型,我必须将它添加到模型和视图层。这似乎违背了多态性的观点,因为接收Question 对象的视图总是必须知道收到的问题的子类类型。我可以通过将呈现问题的责任委托给模型来解决这个问题。如果Question 模型有一个名为render_question() 的虚函数被其子类覆盖,那么视图层可以调用该函数来获取正确的HTML 以输出,而不必担心问题的类型。但是现在我遇到了将 HTML 渲染代码与模型绑定的问题。
是否有第三种解决方案没有我所想到的解决方案的缺点?或者这真的是一个必须做出艰难决定的两难境地?
【问题讨论】:
标签: django model-view-controller design-patterns database-design