Django模式实践
Django的体系结构模式为MVT(Model、View、Template),与传统的MVC在理论层面基本一致:两者之间M的概念是一致的;MVT的View与MVC的Controller相对应;MVT的Template与MVC的View相对应。
但Django更进一步,通过自身的基础结构对MVT的使用在某些层面具有一定的强制性,如在T中不能编写逻辑(所谓的{%if%}等都是普通标签而不是编程语言);也因为Django的命名和提供的一些基础结构与常规的(其他领域)的规范不尽相同,导致在某些方面会给人带来很多迷惑.比如,业务逻辑一般可以写入View层,或者是Model中,或者更具迷惑性的Manager中。
就个人的实践来说,建议按如下规则组织代码结构:
Model层:与模型相关的逻辑存放于此。如一个关于如判断一个题目的答案是否正确的逻辑,应该放到Question的实例方法中;与模型类相关,但与具体模型实例不相关的方法,放到Model的类方法(@classmethod——推荐)或静态方法(@static)中;与模型集合,尤其是与数据访问相关的,放到模型特定的manager子类中,并适时替换Model的objects默认管理器。
View层:流程跳转,模型协作等放到此层。
Template层:单纯的数据表现
如此分法,乍一看是将业务逻辑割裂到Model(充血模型)与View中,未免逻辑不够清晰不便于将来的复用。然而,通过从View端入手,将其看作流程控制与调度层后,就会更加清晰了。而且所谓复用,绝大多数情况下只是一厢情愿罢了。
P.S.也有观点认为MVC/MVT不能算是体系结构模式。只能是表现层模式。这里不细究具体理论观点。