c# - 两个相互依赖的类

标签 c# class xna dependencies bidirectional

我有 Camera 类,它处理相机行为。其中的字段是对目标的 Cube 类的引用(Cube 只是对象之一,但为了简单起见,我不会提及其他对象)。为了计算 View 矩阵,我需要相机的位置和目标的位置,所以我可以向我的程序解释:“相机放在这里,它从这里看这个立方体”。如果立方体碰巧四处移动,相机的视角也会自动改变。

到目前为止,一切都很好:有一个 Camera 类依赖于 Cube 类,还有一个 Cube 类不依赖于任何东西(在这个例子中)。

当我需要绘制一个立方体或任何东西时,我遇到了一个问题——为了绘制一些东西,在所需的值中,它是相机的 View 矩阵;那就是我刚刚在第一段中计算的那个。从本质上讲,这意味着当我要在屏幕上绘制东西时,Cube 类也变得依赖于 Camera 类,并且它们现在相互依赖。那意味着我要么:

  1. 需要将 Camera 类的 View 矩阵字段设为静态,以便我可以直接从 Cube 类访问它。
  2. 需要在 Cube 类中创建一个方法(例如 SetView),然后我可以从 Camera 类中调用该方法(因为我已经在那里引用了它)。
  3. 需要在外部范围内保留一个 View 矩阵。
  4. 需要建立双向依赖关系。

但是,我不喜欢其中任何一个:

  1. 有更多的摄像头可以处理多个 View (目前屏幕上有 3 个)并且可能更多(或更少)。
  2. 这使得代码稍微(有时,也许,非常)不可读——例如,当我绘制立方体时,不太清楚 View 矩阵的来源,你只是有点使用它,不要回头看.
  3. 我会从相机类访问外部范围,或者外部范围会访问相机,我不喜欢这样,因为外部范围仅用于处理执行机制。
  4. 我喜欢将我的引用字段保持为“只读”状态,因为它目前在这个系统中无处不在——引用是在构造函数中设置的,并且只用于从引用的类中获取数据。

而且,如果我没有说清楚,让我重复一遍,有多个 Camera 对象和多个 Cube 对象;虽然任何相机可能依赖也可能不依赖任何立方体,但通常至少有一个相机依赖于立方体。

如有任何建议,我们将不胜感激:)

最佳答案

如果您的 Cube 必须知道如何根据 Camera 渲染自己(因此必须了解 Camera),那么让 Camera 知道如何将自己与 Cube 对齐可能没有意义。当前在 Camera 中的对齐行为可能属于更高级别的类,例如了解 Cubes 和 Cameras 的 CameraDirector。这提高了类的凝聚力,因为它将 Camera 的一些职责分离到一个不同的、重点突出的 CameraDirector 类中。这让 Camera 专注于其核心工作,使其更易于理解和维护。

关于c# - 两个相互依赖的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3959891/

相关文章:

c# - -ms-文本大小调整 :auto not working on List in WebView

PHP类函数调用

c# - 检测某个键是否被快速按下两次

c# - 如何确保文件是有效的音频文件并且不受 DRM 保护?

c# - 连续(美国)状态检查

c# - List<T> 项的 T 泛型

c# - 我可以使用kinect找出肤色或体温吗?

php - 什么时候需要在 PHP 中使用 Classes

指向全局函数的 C++ 类成员指针

image - Windows Phone 7 : How to create a picture album for depositing images from app?