我正在使用DDD方法实现应用程序。我想将域模型分为一个单独的程序包,声明一个存储库,然后实现将在单独的程序包中将SQLAlchemy用作ORM。
从域的角度来看,用户看起来像:
class User:
def __init__(self, name):
self.id = autogenerate_id()
self.name = name
但是对于SQLAlchemy,应将其实现为:
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), nullable=False)
我的问题是:有什么方法可以减少定义SQLAlchemy模型所需的工作量,例如:
答案 0 :(得分:1)
如果我正确理解,您希望有两种实现聚合DTO的方法,而无需将sqlalchemy表映射到python数据结构。在这种情况下,我建议您创建UserDTO接口,该接口将由SQLAlchemy Model和纯域实现(用于测试?)实现。
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)
关于将DTO映射到数据库以及有关实现方法的策略。另外,我在这篇文章Persistency of DDD aggregate
中写了更多内容希望它会帮助您解决DDD的其他问题(例如,模块化整体式体系结构中的单独迁移)。