7

我正在使用 SQLAlchemy 和 wxPython 开发一个应用程序,我试图将其分布在由业务逻辑、ORM 和 GUI 组成的独立模块中。

我不完全确定如何以 Pythonic 方式执行此操作。

鉴于mapping()必须为要使用的对象调用它,我想把它放在__init__.py业务逻辑上,但将所有表定义保存在一个单独的orm.py模块中。

我应该保留以下内容:

/Business
    /__init__.py
    |    mapping (module1.Class1, orm.table1)
    |
    /module1.py
         Class1

/orm.py
     import
     table1 = Table()
/GUI
    /main.py
    |    import business
    /crud.py

或类似的东西

/Business
    /__init__.py
    |    import
    |
    /module1.py
         Class1
         table1 = Table()
         mapping (module1.Class1, orm.table1)

/GUI
    /main.py
    |    import business
    /crud.py

推荐第一种方法吗?还有其他选择吗?我见过第二种方式,但我不喜欢将数据库处理代码和业务逻辑代码放在同一个模块中。我是不是想多了?真的没有那么大的问题吗?

4

1 回答 1

6

我发现Jp Calderone 的这篇文档是关于如何(不)构建你的 python 项目的一个很好的提示。跟着它,你不会有问题。我将在这里复制整个文本:

Python项目的文件系统结构

  • 将目录命名为与您的项目相关的名称。例如,如果您的项目名为“ Twisted ”,请为其源文件命名顶级目录Twisted。当你发布时,你应该包含一个版本号后缀:Twisted-2.5.
  • 创建一个目录Twisted/bin并将您的可执行文件放在那里,如果有的话。不要给它们.py 扩展名,即使它们是 Python 源文件。除了导入和调用项目中其他地方定义的主函数外,不要在其中放置任何代码。
  • 如果您的项目可以表示为单个 Python 源文件,则将其放入目录中,并将其命名为与您的项目相关的名称。例如, Twisted/twisted.py。如果您需要多个源文件,请改为创建一个包(Twisted/twisted/, 为空 Twisted/twisted/__init__.py)并将源文件放入其中。例如, Twisted/twisted/internet.py
  • 将单元测试放在包的子包中(注意——这意味着上面的单个 Python 源文件选项是一个技巧——你总是需要至少一个其他文件来进行单元测试)。例如, Twisted/twisted/test/。当然,将其与 Twisted/twisted/test/__init__.py. 将测试放在像 Twisted/twisted/test/test_internet.py.
  • 如果您感觉不错,请分别添加Twisted/README和 T来解释和安装您的软件。wisted/setup.py

不要

  • 将您的源代码放在名为srcor的目录中lib。这使得不安装就很难运行。
  • 把你的测试放在你的 Python 包之外。这使得很难针对已安装的版本运行测试。
  • 创建一个只有 a 的包, __init__.py然后将所有代码放入__init__.py. 只需制作一个模块而不是一个包,它更简单。
  • 尝试想出一些神奇的技巧来让 Python 能够导入你的模块或包,而无需用户将包含它的目录添加到他们的导入路径中(通过PYTHONPATH或其他机制)。您不会正确处理所有情况,当您的软件在他们的环境中无法运行时,用户会生您的气。
于 2009-10-02T13:48:36.787 回答