Python,初学者问题!是存储库还是对象自我持久化?

8 投票
4 回答
2276 浏览
提问于 2025-04-16 14:35

我是一名经验丰富的 .Net 开发者,现在正在尝试写一些 Python 代码。在我参与的一个项目中,我们有一个服务层,这是一组类,用来封装一些功能,还有一个 Django 网页应用程序,它会使用这些服务(其实就是一些类)。

我创建了一个仓库层,确保所有与数据库的交互都是通过这个仓库层来进行的,都是通过服务层来处理的。我们使用的是文档型数据库,所以没有常见的对象关系问题。

在最近的一次代码审查中,有位自称对 Python 很熟悉的开发者对我的做法表示不满,并评论说这不是 Python 的做法。他提到 Python 开发者习惯于在对象实例上直接有保存和删除的方法(而不太使用仓库模式),这样会让想要参与我们开源项目的 Python 开发者感到困惑。Python 开发者们,你们怎么看?你们会感到困惑吗?

补充:这不是 Django 代码,而是将被 Django 应用调用的代码(这是一个进程内的服务层)。

4 个回答

1

根据我的记忆,Django的模型里有 save()delete() 这两个方法,这样你就可以只处理对象,而不用直接和数据库连接打交道。我不确定这是不是Python的标准做法,但我可以肯定这是Django里常见的写法。

如果有人告诉我“这是Django代码”,但这段代码和Django的常规做法不一样,那可能会让我感到困惑。

2

Django的ORM(对象关系映射)提供了save()delete()这两个方法,可以直接在对象上使用。而SQLAlchemy则有一个叫做session的东西,你需要把对象添加到这个会话中,或者从中删除对象。

这两种方法都很受欢迎,所以我觉得它们在受欢迎程度上差不多。不过在Django应用中,遵循Django的惯例可能更好,除非你有特别的理由不这样做。

3

这可能是Django的一个设计模式,但绝对不是Python的设计模式。
不过,如果你的模块主要是给Django开发者使用的,我建议你尽量遵循Django的理念和相关的设计模式。

撰写回答