gpt4 book ai didi

Python 结构问题 : Giving an 'engine' class to everything

转载 作者:太空宇宙 更新时间:2023-11-03 14:30:06 25 4
gpt4 key购买 nike

我在用 Python 制作“比简单的脚本和东西更大”的应用程序时遇到了一些问题。我有一个叫做 WinMain 的类,一个叫做 Engine 的类,一个叫做 State,另一个叫做 Element。它的布局如下:

WinMain 是程序的主类,它有一个 mainLoop 函数和其他各种东西。

引擎是一个包含图像和渲染代码等数据的对象。

State 是 Engine 持有的对象,每次调用 Engine 的 step 函数时都会调用它的 update 方法。

元素是由 State 持有的对象,例如要呈现的 gui 按钮和图片。

由于我的渲染函数在引擎中,我将如何让我的元素(由状态持有)来渲染东西?我想我可以为每个 Element 提供 Engine 的实例,但这似乎有点老套,因为我必须做这样的事情:picture = Element(engine, (0, 0), 'gui_image')(不好)

我宁愿做 picture = Element((0, 0), 'gui_image') 以及如何让 Element 使用 Engine 渲染东西。

这似乎是我在开始的大多数项目中遇到的主要结构性问题,而且我似乎找不到解决它的方法(除了通过类和函数的参数传递大量变量之外)。我该怎么做?

最佳答案

Engine is an object that contains data like images and rendering code

这听起来像是一个上帝类:它们在 GUI 代码中很常见,而您遇到的问题是其共同影响。

引擎中不同东西之间的概念关系是什么?它是否需要紧密耦合,或者引擎是否可以在状态、渲染器和其他一些东西之间进行协调?

然而,该位出现故障,通过状态机向下传递引擎(或渲染器,或其他)是避免当前架构的全局(或单例)的唯一方法。


打破这种依赖关系的通常方法是使用类似 MVC(模型/ View / Controller )模式的东西。具体来说,听起来 Engine 已经大致是一个 Controller,而 State 和 Elements 涵盖了 Model 部分。然而,引擎、状态和元素处理渲染/呈现部分:这引入了耦合。

如果你能找到一种方法将 State 更改发布给某个观察者(故意保持模糊,因为我们不希望 State 逻辑过多地依赖于观察者的细节) ,您可以让渲染器监听状态(模型)更新并绘制它们。现在,观察者可以是任何你想要的东西,所以它很容易模拟,而且它也与引擎分离。

关于Python 结构问题 : Giving an 'engine' class to everything,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12848684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com