如何使用 django 组织我的域层?
我知道我可以编写自定义管理器来保存我的查询,但是如果我想要像规范模式这样更灵活的东西怎么办。
有没有 Django 独有的域模式?
我目前正在设计一个使用 Django 的大型应用程序,我想知道如何正确地执行域层。
如何使用 django 组织我的域层?
我知道我可以编写自定义管理器来保存我的查询,但是如果我想要像规范模式这样更灵活的东西怎么办。
有没有 Django 独有的域模式?
我目前正在设计一个使用 Django 的大型应用程序,我想知道如何正确地执行域层。
这个问题有点主观,但这是我的两分钱:
MyModel.objects.create_complex(foo, bar)
my_instance.get_accumulated_interest()
。这些不应该保存模型,只更新一些字段然后返回。clean
放在模型上的clean
方法中,或者作为特殊形式的方法。如果它在模型上,则可以更轻松地从系统的不同部分重用它。当我说“应该进入 X”时,我的意思是系统的这些部分应该调用您自己的模块,这些模块可能与 Django 完全分开。这可能使单独测试这些功能变得更容易。
编辑:
对于“规范模式”,我建议编写一个调用管理器方法来过滤对象的更高级别的模块。使用Q 对象,您可以创建可以像这样使用的通用过滤器:
q = Q(field__isnull = False) | Q(otherfield__isnull = False)
objects = Model.objects.filter(q)
编辑二:
它让我印象深刻: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)
你看到我刚才在那里做了什么吗?:)