如何在Web MVC框架中正确实现Strategy模式?

时间:2009-04-27 13:44:19

标签: model-view-controller design-patterns strategy-pattern

在我的Django应用程序中,我有一个名为“type”的字段(让我们称之为Foo)。我想使用Foo.type来指示Foo的特定实例是什么类型(可能的选择是“数字”,“日期”,“单行文本”,“多行文本”等等)

有两件事我希望“类型”字段最终影响;值从正常类型转换为文本的方式(例如,在“Date”中,它可能是str(the_date.isoformat())),以及值从文本转换为指定类型的方式(在“Date”中,它可能是datetime.date.fromtimestamp(the_text))。

对我而言,这似乎是战略模式(我可能完全错了,如果我愿意,可以随意纠正我)。我的问题是,在Web MVC框架中对此进行编码的正确方法是什么?

在客户端应用程序中,我将使用抽象方法“serialize()”和“unserialize()”创建一个Type类,覆盖Type的子类中的那些方法(例如NumberType和DateType),并动态设置新实例化的Foo的“type”字段在运行时到相应的Type子类。

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

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

1 个答案:

答案 0 :(得分:0)

你可以查看django ORM提供的继承内容。这将为您提供实际子类化的方法,无论模型具有判别器,不同的表等等。

Foo # base
DateFoo(Foo)
OtherFoo(Foo)

等...