2009-04-27 116 views
1

在我的Django應用程序中,我有一個名爲「type」的字段(稱爲Foo)。我想使用Foo.type來表明Foo的具體實例是什麼類型(可能的選擇是「數字」,「日期」,「單行文本」,「多行文本」以及其他一些) 。如何在Web MVC框架中正確實施策略模式?

有兩件事情我希望「類型」字段最終影響;值從正常類型轉換爲文本的方式(例如,在「日期」中,它可能是str(the_date.isoformat()))以及值從文本轉換爲指定類型的方式(在「日期」中,它可能是datetime.date.fromtimestamp(the_text) )。

對我來說,這看起來像是策略模式(我可能完全錯了,如果我願意,可以隨時糾正我)。我的問題是,在web MVC框架中編寫代碼的正確方法是什麼?在一個客戶端應用程序中,我創建一個帶有抽象方法「serialize()」和「unserialize()」的Type類,覆蓋Type的子類(如NumberType和DateType)中的那些方法,並動態地在運行時將新實例化的Foo的「type」字段設置爲適當的Type子類。

在一個web框架中,它對我來說並不那麼簡單。現在,最有意義的方式是將Foo.type定義爲小整數字段並定義一組有限的選項(0 =「Number」,1 =「Date」,2 =「單行文本」,等等)在代碼中。然後,當Foo對象被實例化時,使用Factory方法來查看實例的「type」字段的值並插入正確的Type子類(如上段所述)。 Foo還會有serialize()和unserialize()方法,它們將直接委託給插入的Type子類。

這種設計是如何發聲的?我以前從未遇到過這個問題,所以我很想知道其他人是否有,以及他們如何解決這個問題。

回答

0

你可以看看django ORM提供的繼承東西。這會給你的方式來實際繼承任何型號爲W /鑑別,不同的表,等

Foo # base 
DateFoo(Foo) 
OtherFoo(Foo) 

等等

+0

我不反對這種解決方案100%,但我警惕爲每個我想要的新類型分類Foo。我沒有一個強有力的理由,在這種情況下感覺不對。不過我會記住它的。感謝一羣回覆。 – jakeboxer 2009-04-27 18:39:55