【问题标题】:Maintaining relationships between objects in Python在 Python 中维护对象之间的关系
【发布时间】:2010-06-28 05:04:47
【问题描述】:

考虑以下假设的人员管理系统。假设每个Person 对象属于多个Group 对象,并且每个Group 包含多个Person 对象。我们可以通过向每个Person 和每个Group 对象添加list 来表示它,但是当我们创建、删除或修改对象时我们必须保持同步。在这种情况下,更改回调无法正常工作,因为它们可能导致无限循环。

现在假设每个Group 都有一个名称和一个描述。该名称存储在dict 中,以便我们可以找到哪个组使用哪个名称,并且对描述进行索引以便我们可以搜索它。每当组发生变化时,这些都需要更新。

应用程序有一个图形用户界面,可以显示PersonGroup。每当对象的属性发生变化时,GUI 都需要更新。

假设我们必须处理大量这样的效果。跟踪这一点相当令人困惑。我可以想象这些使用属性、自定义集合甚至元类。是否有任何设计模式/框架来处理这类系统?

【问题讨论】:

    标签: python oop


    【解决方案1】:

    大多数 ORM 都会处理这个问题。只需使用内存中的 SQLite 表,然后让它完成繁重的工作。

    【讨论】:

      【解决方案2】:

      这很棘手。是的,Person 和 Group 数据可以映射到关系数据库中的表,但自动更新视图更具挑战性。

      幸运的是,Qt(以及 PyQT)有一个 MVC 框架,可以自动处理你想要的大部分内容。数据存储组件可以使用数据库表来存储 Person 和 Group 数据。您还可以在同一个底层数据模型上创建多个视图,并将它们配置为在底层数据更改时自动更新。这使用了一个称为 Signals 的 Qt 功能,视图订阅模型的信号以获取更改通知。

      Rapid GUI Programming with Python and QT 这本书有与这本书非常相似的例子,见第 14 章和第 15 章。可能还有其他 GUI 框架提供类似的 MVC 功能,当底层数据发生变化时,视图会自动通知。

      【讨论】:

        猜你喜欢
        • 2014-04-26
        • 1970-01-01
        • 2014-03-12
        • 2011-06-30
        • 2010-11-29
        • 1970-01-01
        • 2016-07-14
        • 1970-01-01
        • 2016-02-08
        相关资源
        最近更新 更多