绘制数据结构

Drawing a data structure

我正在为学习目的创建一个数据结构(B 树)的实现。

我想将所需的 classes 放入它自己的程序集中,并且只在那里引用和使用最少的 .NET 命名空间。当然,我也通过 private 或 internal 隐藏了尽可能多的数据和代码,所以 class 看起来很干净。

在开发、调试等过程中,我确实将树的图形表示绘制到位图上并将其转储到磁盘上,但为此我需要 System.Drawing、...2D、...成像,...文本作为命名空间。这些不应该是纯数据结构代码的一部分。这个绘图代码应该是"somewhere else"

我完成了开发,一切正常,绘制完美。我可以看到我的树随着磁盘上的图片列表而增长和缩小,但我对解决方案布局不满意。我觉得我把每个集会的问题都搞砸了。

目前绘图代码是 windows 表单代码的一部分,我将相当多的 public 属性放入数据结构 class 中以允许绘图代码获取绘图时需要的值。

现在我将如何创建一个项目,class 和程序集,可以将树绘制成位图而不影响纯数据结构class?

每当树确定它改变了它的结构并且应该重新显示时,它就会引发事件(或调用委托?)。负责绘图的程序集需要这些调用,但也需要访问树的私有详细信息以显示它。

反射是我比较熟悉的东西,但听起来有点过头了。

我可以进行 DEBUG 和 RELEASE 构建,并使用条件编译(##IFDEBUG?)封装绘图部分,但这仍然意味着我需要在数据结构代码中包含大量代码(和编译提示) .

部分 class 在同一个 assemble 中?仍然需要参考 System.Drawing.

还有其他建议吗?

谢谢 拉尔夫

这通常是一个难题,但您可以做的一件事是仅向绘图代码公开 internal 成员,这样其他代码就不需要知道它们的存在。您可以使用 InternalsVisibleToAttribute 创建能够访问另一个程序集的内部成员的 "friend" 程序集。然后,您可以将绘图代码放入第二个程序集中,并保持主要程序的原始状态。