在我的 Django 应用程序中,我有一个模型(我们称之为 Foo),其中包含一个名为“type”的字段。我想使用 Foo.type 来指示 Foo 的特定实例是什么类型(可能的选择是“数字”、“日期”、“单行文本”、“多行文本”等等) .
我希望“类型”字段最终影响两件事;一个值从其普通类型转换为文本的方式(例如,在“日期”中,它可能是str(the_date.isoformat())
),以及一个值从文本转换为指定类型的方式(在“日期”中,它可能是datetime.date.fromtimestamp(the_text)
)。
对我来说,这似乎是策略模式(我可能完全错了,如果我错了,请随时纠正我)。我的问题是,在 Web MVC 框架中进行编码的正确方法是什么?
在客户端应用程序中,我将使用抽象方法“serialize()”和“unserialize()”创建一个 Type 类,在 Type 的子类(例如 NumberType 和 DateType)中覆盖这些方法,并动态设置“type " 在运行时将新实例化的 Foo 字段添加到适当的 Type 子类。
在 Web 框架中,这对我来说并不那么简单。现在,最有意义的方法是将 Foo.type 定义为 Small Integer 字段并定义一组有限的选择(0 =“数字”,1 =“日期”,2 =“单行文本”,等)在代码中。然后,当实例化 Foo 对象时,使用 Factory 方法查看实例的“type”字段的值并插入正确的 Type 子类(如上段所述)。Foo 也有 serialize() 和 unserialize() 方法,它们将直接委托给插入的 Type 子类。
这个设计听起来怎么样?我以前从未遇到过这个问题,所以我真的很想知道其他人是否有,以及他们是如何解决的。