代码之家  ›  专栏  ›  技术社区  ›  Casebash

在Python中维护对象之间的关系

  •  2
  • Casebash  · 技术社区  · 15 年前

    考虑下面假设的人管理系统。假设每个 Person 对象属于多个对象。 Group 对象和每个 包含若干 物体。我们可以通过添加一个 list 对每个 每一个 对象,但是我们必须在创建、删除或修改对象时保持同步。在这种情况下,on-change回调无法很好地工作,因为它们可能导致无限循环。

    现在假设每个 有名字和描述。名称存储在 dict 这样我们就可以找到哪个组使用了哪个名称,并且索引了描述,这样我们就可以搜索它了。每当组发生更改时,都需要更新这些内容。

    该应用程序有一个GUI,可以显示 . 每当对象的属性发生变化时,GUI就需要更新。

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

    2 回复  |  直到 15 年前
        1
  •  3
  •   Ignacio Vazquez-Abrams    15 年前

    大多数ORMS处理这个问题。只需使用内存中的SQLite表,并让它做艰苦的工作。

        2
  •  1
  •   Simon Hibbs    15 年前

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

    Fortunately Qt (and therefore PyQT) has an MVC framework that automatically handles much of what you want. 数据存储组件可以使用数据库表存储人员和组数据。您还可以在同一基础数据模型上创建多个视图,并将其配置为在基础数据更改时自动更新。这使用了一个称为信号的qt特性,视图订阅模型的信号,以便它们得到更改的通知。

    Rapid GUI Programming with Python and QT has examples for very similar cases to this one, see chapters 14 and 15. 也可能有其他的GUI框架提供类似的MVC功能,当底层数据发生变化时,视图会自动得到通知。