Django松散地耦合数据库和视图

时间:2014-07-28 17:59:16

标签: database django

也许这是一个愚蠢的问题,但我是django大规模开发的新手。基本的django示例始终显示简单查询,您可以在其中获取查询集并将结果集返回给模板以供使用(例如,用户列表)。我想知道这对大型网站来说真的是最好的做法吗?来自面向对象的世界,我们保持了单独的结构,以便将数据库与业务逻辑和视图松散地结合在一起。一组模型将直接映射到数据库中的表,并使用诸如SqlAlchemy之类的ORM来自动管理它们,但是将使用单独的业务模型根据业务逻辑需求返回到视图以供模板使用。它们可能具有比数据库表对象多或少的字段,具体取决于该模板所需的信息,并来自包含业务逻辑的可重用代码层。例如,有时您希望将多个数据库模型中的几列展平为一个易于使用的类。

对于诸如事务和连接处理之类的情况,可重用层允许我们将所有数据库知识保留在视图之外。中间层显式创建并使用会话以根据需要在不同对象上使用,并在完成时关闭会话,但我很少在django中看到这样做的证据。虽然它是更多的开发工作,但它往往会提供更好的性能结果。在django世界中,这种模型和业务逻辑的分离是否都被视为过度杀伤?感谢。

1 个答案:

答案 0 :(得分:0)

根据您的解释,我感觉您希望构建一个以可重用格式缓存查询集结果的中间件层。

Django采用相反的方法:querysets are lazy。在视图中需要它们的结果之前,它们不会触及数据库。组合查询时,只有组合查询才能访问数据库。

除此之外,如果您明智地构建模型,caching and querysets可以为大多数情况提供良好的性能。