Model view controller 如何在WebMVC框架中正确地实现策略模式?

Model view controller 如何在WebMVC框架中正确地实现策略模式?,model-view-controller,design-patterns,strategy-pattern,Model View Controller,Design Patterns,Strategy Pattern,在我的Django应用程序中,我有一个模型(我们称之为Foo),其中有一个名为“type”的字段。我想使用Foo.type来指示Foo的具体实例是什么类型(可能的选择有“Number”、“Date”、“单行文本”、“多行文本”和其他一些) 有两件事我希望“类型”字段最终会影响到:;将值从其普通类型转换为文本的方式(例如,在“日期”中,它可能是str(the_Date.isoformat())),以及将值从文本转换为指定类型的方式(在“日期”中,它可能是datetime.Date.fromtime

在我的Django应用程序中,我有一个模型(我们称之为Foo),其中有一个名为“type”的字段。我想使用Foo.type来指示Foo的具体实例是什么类型(可能的选择有“Number”、“Date”、“单行文本”、“多行文本”和其他一些)

有两件事我希望“类型”字段最终会影响到:;将值从其普通类型转换为文本的方式(例如,在“日期”中,它可能是
str(the_Date.isoformat())
),以及将值从文本转换为指定类型的方式(在“日期”中,它可能是
datetime.Date.fromtimestamp(the_text)

对我来说,这似乎是一种策略模式(我可能完全错了,如果我错了,请随意纠正)。我的问题是,在WebMVC框架中编写代码的正确方法是什么

在客户端应用程序中,我将使用抽象方法“serialize()”和“unserialize()”创建一个类型类,在类型的子类(如NumberType和DateType)中重写这些方法,并在运行时将新实例化的Foo的“Type”字段动态设置为适当的类型子类

在web框架中,这对我来说并不那么简单。现在,最有意义的方法是将Foo.type定义为一个小整数字段,并在代码中定义一组有限的选项(0=“Number”、1=“Date”、2=“单行文本”等)。然后,当一个Foo对象被实例化时,使用工厂方法查看实例的“type”字段的值,并插入正确的type子类(如上面的段落所述)。Foo还具有serialize()和unserialize()方法,它们将直接委托给插入的类型子类


这个设计听起来怎么样?我以前从未遇到过这个问题,所以我很想知道其他人是否遇到过,以及他们是如何解决的。

您可以查看django提供的继承内容。这将为您提供一种方法,使您能够对任何模型进行子类化,包括鉴别器、不同的表等

Foo # base
DateFoo(Foo)
OtherFoo(Foo)

等等。

我不是100%反对这个解决方案,但我对为我想要的每种新类型子类化Foo都很谨慎。我没有强有力的理由来解释为什么,在这种情况下,我感觉不太对劲。不过我会记住的。谢谢你的回复。