Python 分离业务逻辑和模型
我有一个问题困扰了我一段时间。乍一看,这似乎是一个相当基本的问题,但似乎没有一个明确的答案。我提出这个问题的基础是一个Python项目,它通过SQLAlchemy使用PostgreSQL,但使用的特定语言和工具并不重要 基本问题是,在使用ORM时,逻辑放在哪里?更具体地说,映射类的方法应该包含哪些逻辑 似乎存在一些明确的情况,例如,属性的基本验证,如最小长度或某个电子邮件地址是否应属于ORM层(甚至数据库本身) 下面是一个简单的具体示例,假设我们正在存储用户对象,用户有一个电子邮件地址(这是他们的唯一id)、一个密码和一个激活id。当创建一个帐户时,会将一个激活id分配并邮寄给用户,然后用户使用该id设置密码 让我们看几个场景:Python 分离业务逻辑和模型,python,orm,sqlalchemy,separation-of-concerns,Python,Orm,Sqlalchemy,Separation Of Concerns,我有一个问题困扰了我一段时间。乍一看,这似乎是一个相当基本的问题,但似乎没有一个明确的答案。我提出这个问题的基础是一个Python项目,它通过SQLAlchemy使用PostgreSQL,但使用的特定语言和工具并不重要 基本问题是,在使用ORM时,逻辑放在哪里?更具体地说,映射类的方法应该包含哪些逻辑 似乎存在一些明确的情况,例如,属性的基本验证,如最小长度或某个电子邮件地址是否应属于ORM层(甚至数据库本身) 下面是一个简单的具体示例,假设我们正在存储用户对象,用户有一个电子邮件地址(这是他们
- 用户创建一个帐户李>
- 用户激活帐户(即设置密码)
- 电子邮件地址正确=>ORM李>
- 电子邮件地址唯一=>ORM或数据库(唯一约束)李>
- 设置一个随机激活id=>ORM
我在互联网上搜索过,有一些来源谈论这个问题(包括一些SO问题),但没有一个真正回答这个问题。MVC中的模型层包含域业务逻辑。我怀疑您出于某种原因假设“模型”是类/对象。我认为有两个极端:试图将所有逻辑塞进ORM映射的类中,或者只保留ORM映射的类的数据并将逻辑放在其他地方。我的结论是:不管你把逻辑放在哪里,最终都会变得一团糟。“业务逻辑”放在“持久性逻辑”中,即存储抽象中(最佳解决方案是cusomt,但一些新手更喜欢ORM magic),域对象和存储抽象之间的交互称为*“应用程序逻辑”,它存在于服务中。这三个组组合在一起构成了模型层。问题是人们看着Rails,认为它是MVC。Rails不是MVC。模仿它的框架也不是。“最佳解决方案是。。。".. 引用?我投票结束这个问题,因为我认为没有任何方法可以客观地回答这个问题。也许这更适合。@tereško如果你对你描述的模型层有一个好的参考URL,我会感兴趣的。