使用 DDD 方法在 Python 中保留 POJO

2024-03-18

我正在尝试使用 DDD 模式创建 Flask 应用程序。

DDD 的核心原则之一是将领域与持久性(基础设施)分离。我已在模块中定义了域模型,并将在基础设施模块中创建存储库。

但是,我似乎找不到任何关于如何在 Python 中持久保存 POJO 的信息。我研究过 sqlalchemy,但是使用 sqlalchemy 您可以创建持久性模型。创建领域模型作为持久性模型是 DDD 中的反模式。

对于这样的用例有哪些持久性选项可用?更具体地说,我可以使用哪些持久化选项来持久化定义为 POJO 的模型?


对于这种情况,您可以选择几种策略。在许多情况下,聚合的 DTO 是 DB 模型并不是问题。如果您想要分离,您可以为此 DTO 创建一个接口,并将其作为模型在存储库中实现。

class User:
    id: int
    name: Text

class PlainUser(User):
    def __init__(self, name):
        self.id = autogenerate_id()
        self.name = name

class DBUser(db.Model, User):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), nullable=False)

另一种策略是在 POPO 上映射 sqlalchemy 表(顺便说一句。在 Java 中,您有 POJO,纯旧 Java 对象。在 python 中,您有 POPO,纯旧 Python 对象)。 因此,您声明表并使用映射器而不是声明模式。 第三个选项是使用一个库将 DB 模型映射到 POPO,例如干Python/映射器 https://mappers.readthedocs.io/en/latest/。 此外,如果您想分离 DDD 组件,您需要考虑单独的迁移。为了更深入地回答这个问题(以及 StackOverflow 上的另一个问题),我写了这篇文章DDD聚合的持久性 https://lukeonpython.blog/2020/04/persistency-of-ddd-aggregate/。希望它对您解决 DDD 组件的其他障碍有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 DDD 方法在 Python 中保留 POJO 的相关文章

随机推荐