如何整理使用SQLAlchemy制作的具有图形界面的应用程序的源代码?

发布于 2024-08-06 14:39:27 字数 821 浏览 7 评论 0原文

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

我不完全确定如何以Python方式做到这一点。

鉴于要使用的对象必须调用 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

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

I'm developing an application using SQLAlchemy and wxPython that I'm trying to keep distributed in separated modules consisting of Business logic, ORM and GUI.

I'm not completely sure how to do this in a pythonic way.

Given that mapping() has to be called in orther for the objects to be used, I thought of putting it on the __init__.py of the bussiness logic, but keeping all the table definitions within a separate orm.py module.

Should I keep something like:

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

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

or something like

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

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

Is the first approach recommended? Is there any other option? I've seen the second way, but I don't like putting the database handling code and the bussiness logic code within the same module. Am I overthinking it? Is really not that big a problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

冷情妓 2024-08-13 14:39:27

我发现 Jp Calderone 的 这篇文档 是关于如何(不)构建 Python 的一个很好的提示项目。遵循它,你不会有任何问题。我将在这里重现全文:

Python 项目的文件系统结构

执行

  • 为目录命名
    与您的项目相关。例如,
    如果您的项目名为“Twisted”,
    为其命名顶级目录
    源文件Twisted。当你这样做时
    发布,你应该包含一个版本
    数字后缀:Twisted-2.5
  • 创建一个目录Twisted/bin
    把你的可执行文件放在那里,如果你
    有的。不要给他们 .py
    扩展,即使它们是 Python
    源文件。不要输入任何代码
    除了导入和调用之外
    main 函数在其他地方定义
    在您的项目中。
  • 如果您的项目
    可表示为单个 Python
    源文件,然后将其放入
    目录并为其命名
    与您的项目相关。例如,
    Twisted/twisted.py。如果您需要
    多个源文件,创建一个
    改为包(Twisted/twisted/
    与一个空的
    Twisted/twisted/__init__.py) 和
    将您的源文件放入其中。为了
    例子,
    Twisted/twisted/internet.py

  • 您的单元测试在一个子包中
    您的包裹(注意 - 这意味着
    单个 Python 源文件选项
    上面是一个技巧 - 你总是需要
    您单位的至少一份其他文件
    测试)。例如,
    扭曲/扭曲/测试/。当然,
    使其成为一个包
    Twisted/twisted/test/__init__.py
    将测试放在类似的文件中
    Twisted/twisted/test/test_internet.py
  • 添加 Twisted/README 和 Twisted/setup.py 进行解释和
    分别安装您的软件,
    如果你感觉不错的话。

不要

  • 将源代码放入目录中
    称为srclib。这使得
    不安装就很难运行。

  • 在 Python 之外进行测试
    包裹。这使得运行起来很困难
    针对已安装的版本进行测试。
  • 创建一个只有一个包
    __init__.py 然后把你所有的
    代码写入__init__.py。只要做一个
    模块而不是包,它是
    更简单。
  • 尝试想出
    神奇的黑客让Python能够
    导入你的模块或包而不
    让用户添加目录
    将其包含到导入路径中
    (通过 PYTHONPATH 或其他一些
    机制)。你不会正确地
    处理所有情况,用户将得到
    当你的软件对你生气时
    在他们的环境中不起作用。

I find this document by Jp Calderone to be a great tip on how to (not) structure your python project. Following it you won't have issues. I'll reproduce the entire text here:

Filesystem structure of a Python project

Do:

  • name the directory something
    related to your project. For example,
    if your project is named "Twisted",
    name the top-level directory for its
    source files Twisted. When you do
    releases, you should include a version
    number suffix: Twisted-2.5.
  • create a directory Twisted/bin and
    put your executables there, if you
    have any. Don't give them a .py
    extension, even if they are Python
    source files. Don't put any code in
    them except an import of and call to a
    main function defined somewhere else
    in your projects.
  • If your project
    is expressable as a single Python
    source file, then put it into the
    directory and name it something
    related to your project. For example,
    Twisted/twisted.py. If you need
    multiple source files, create a
    package instead (Twisted/twisted/,
    with an empty
    Twisted/twisted/__init__.py) and
    place your source files in it. For
    example,
    Twisted/twisted/internet.py.
  • put
    your unit tests in a sub-package of
    your package (note - this means that
    the single Python source file option
    above was a trick - you always need at
    least one other file for your unit
    tests). For example,
    Twisted/twisted/test/. Of course,
    make it a package with
    Twisted/twisted/test/__init__.py.
    Place tests in files like
    Twisted/twisted/test/test_internet.py.
  • add Twisted/README and Twisted/setup.py to explain and
    install your software, respectively,
    if you're feeling nice.

Don't:

  • put your source in a directory
    called src or lib. This makes it
    hard to run without installing.
  • put
    your tests outside of your Python
    package. This makes it hard to run the
    tests against an installed version.
  • create a package that only has a
    __init__.py and then put all your
    code into __init__.py. Just make a
    module instead of a package, it's
    simpler.
  • try to come up with
    magical hacks to make Python able to
    import your module or package without
    having the user add the directory
    containing it to their import path
    (either via PYTHONPATH or some other
    mechanism). You will not correctly
    handle all cases and users will get
    angry at you when your software
    doesn't work in their environment.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文