sqlalchemy 模型的数据和逻辑分离

Posted

技术标签:

【中文标题】sqlalchemy 模型的数据和逻辑分离【英文标题】:Separation between data and logic for sqlalchemy models 【发布时间】:2018-07-09 01:42:42 【问题描述】:

在下面的示例中,我应该将 get_friend 方法保留在我的类中还是应该将它移到外面,因为我想将数据结构与业务逻辑分开? 最佳做法是什么? 不要因为班级小而有偏见,这只是一个例子,但班级可能会更大。

from sqlalchemy import Column, Integer, String, Float, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()

class User(Base):
    id = Column("id", Integer, primary_key=True)
    friends = relationship("Friends")

    def get_friend(self, friend_name):
        for friend in self.friends:
            if friend.name == friend_name:
                return friend
        return None

【问题讨论】:

【参考方案1】:

我从没用过 python,只用 DAL 和 BLL 来回答这个问题。

User 是你的持久模型,如果我没记错的话。理想情况下,它应该只处理持久性问题。它不应该处理域逻辑;该部分应移至业务逻辑层或您的服务类。

好吧,对此没有任何硬性规定;但有“良好做法”/“建议”/“范式”/“模式”。这些是根据大型社区的更广泛经验定义的。

因此,您最好考虑将该方法移至您的 BLL。

【讨论】:

以上是关于sqlalchemy 模型的数据和逻辑分离的主要内容,如果未能解决你的问题,请参考以下文章

ORM框架之SQLALchemy

flask mysql sqlalchemy教程

sqlalchemy.exc.NoSuchModuleError:无法加载插件:sqlalchemy.dialects:postgres

Python 学习笔记 - sqlAlchemy(初稿)

使用 Flask-SQLAlchemy 在 Alembic 自动生成迁移中未检测到任何变化

sqlalchemy 映射的小例子