我在我的Python应用程序中在MVC模式的Model部分中构造类时遇到问题.无论我如何扭转局面,我都会继续进行循环进口.这就是我所拥有的:
型号/ __ init__p.y
应该包含所有Model类名,以便我可以从"模型导入用户"执行,例如从Controller或单元测试用例
型号/ Database.py
持有数据库类
需要导入所有Model类才能执行ORM
初始化应该在第一个模块导入时执行,即没有额外的init调用或实例化(Database类上的所有方法都是@classmethods)
型号/ User.py
包含用户模型类
需要访问Database类来进行查询
应该从所有Model类通用的基类继承来共享功能(数据库持久性方法,参数验证代码等)
我还没有看到一个使用MVC的真实世界Python应用程序,所以我的方法可能是非Pythonic(并且可能是语言无关的混乱......) - 关于如何解决这个问题的任何建议?
谢谢,西蒙
您的规范存在不一致之处.你说Database.py需要导入所有Model类来做ORM,但是你说User类需要访问数据库才能进行查询.
将这些视为API的层.Database类为某些物理持久层(例如DB-API 2.0)提供API(可能是面向对象的).Model类(如User)使用Database层加载和保存其状态.Database.py类没有理由导入所有Model类,事实上你不会想要这样,因为你每次创建一个新的Model类时都必须修改Database.py - 这是一个代码味道.