【发布时间】:2020-10-27 10:04:46
【问题描述】:
我在 PHP 和 c# 开发方面有丰富的经验,我正在研究学习 Python。我想练习数据存储和检索,当我看到大多数 python ORM 如何处理模型层时,我哭了。
在 python ORMs 中,模型实体做了很多工作似乎很正常——它不仅是一个数据容器(我认为它应该是这样的),而且对于某些库来说,它也持有数据库连接(@ 987654321@ - 是的,您可以使用没有 db 的实体并稍后绑定它,但您仍然必须使用该实体进行数据检索...)或具有一些它们继承的公共元数据对象(declarative_base in SQLalchemy)。在某些库中,实体类用于数据retrieval、filtering、storage 或deletion。类似的概念可以在其他 ORM 库中看到,例如 django-orm、tortoise-orm、pony-orm。
这赋予了实体类过多的责任,并将实体(以及整个数据服务层)与特定的库实现绑定在一起。它还打破了单一职责原则,概念分离,使测试变得更加困难,使依赖注入变得非常不可用,可能还有许多我现在想不到的事情。即使提到的库通常很好并且可以满足您的所有需求,但我无法克服这个基本的东西......
我期待看到一些负责数据存储和检索的管理器/数据服务层。实体将是接近普通的对象,对数据库层一无所知(如sqlite-net 或doctrine 实体)。 python中是否存在类似的东西?为什么这种(反)模式在 python 库中如此普遍?
谢谢
【问题讨论】:
标签: python python-3.x orm