3
如何使用django來組織我的域圖層?Django和域圖層
我知道我可以編寫自定義管理器來保存我的查詢,但是如果我想要更像規範模式更靈活的東西。
是否有任何Django獨有的域模式?
我目前正在設計一個使用Django的大型應用程序,我想知道如何執行域圖層。
如何使用django來組織我的域圖層?Django和域圖層
我知道我可以編寫自定義管理器來保存我的查詢,但是如果我想要更像規範模式更靈活的東西。
是否有任何Django獨有的域模式?
我目前正在設計一個使用Django的大型應用程序,我想知道如何執行域圖層。
這個問題有點主觀的,但這裏有我的兩分錢:
MyModel.objects.create_complex(foo, bar)
my_instance.get_accumulated_interest()
。這些不應該保存模型,只更新一些字段然後返回。clean
方法或採用特殊形式的clean
方法。如果在模型上,它可以更容易地從系統的不同部分重用。當我說「應該進入X」時,我的意思是系統的這些部分應該調用自己的模塊,這些模塊可能與Django完全分開。這可能會更容易孤立地測試這些功能。
編輯:
對於「規範模式」,我建議寫調用經理的方法來過濾對象更高層次的模塊。隨着Q objects,您可以創建,您可以使用這樣的通用過濾器:
q = Q(field__isnull = False) | Q(otherfield__isnull = False)
objects = Model.objects.filter(q)
編輯II:
它只是讓我吃驚:Python允許非常通用的編程。班級和職能是一流的公民。考慮下面的例子:
def HasFooBar(model_class):
return list(model_class.objects.filter(somefield__contains = 'foobar'))
def BarHasBaz(model_class, arg):
return list(model_class.objects.filter(somefield = arg))
objects = HasFooBar(MyModel) + BarHasBaz(OtherModel, baz)
你看我剛剛在那裏做了什麼? :)
是的,但規範可以更抽象的查詢。例如:HasFooBar()。和()。BarHasBaz()這些是一起加入的大量查詢。 – 2010-11-28 17:16:57