【问题标题】:Drawing a data structure绘制数据结构
【发布时间】:2016-01-29 09:38:44
【问题描述】:

我正在创建一个用于学习目的的数据结构(B-Tree)的实现。

我想将所需的类放入它自己的程序集中,并且只在其中引用和使用最少的 .NET 命名空间。当然,我也会通过私有或内部尽可能多地隐藏数据和代码,以便类看起来干净。

在开发、调试等过程中,我确实将树的图形表示绘制到位图上并将其转储到磁盘上,但要做到这一点,我需要 System.Drawing, ...2D, ...Imaging, .. .Text 作为命名空间。这些不应该是纯数据结构代码的一部分。这个绘图代码应该是“其他地方”

我已经完成了开发,一切正常,绘制完美。我可以看到我的树在磁盘上以图片列表的形式增长和缩小,但我对解决方案布局不满意。我觉得我把每个大会的顾虑都搞砸了。

目前绘图代码是windows窗体代码的一部分,我在数据结构类中放入了相当多的公共属性,以允许绘图代码在绘图时获取所需的值。

现在我将如何创建一个项目、类和程序集来将树绘制为位图而不损害纯数据结构类?

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

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

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

同一个程序集中的部分类?仍然需要引用System.Drawing

还有其他建议吗?

谢谢 拉尔夫

【问题讨论】:

  • 您确实需要(至少)3 个项目:1)数据结构,2)绘图,3)调用其他两个的 main。您可以通过依赖注入“粘合”项目/程序集

标签: c# architecture solution b-tree


【解决方案1】:

这通常是一个难题,但您可以做的一件事是仅将 internal 成员暴露给您的绘图代码,以便其他代码不需要知道它们的存在。您可以使用InternalsVisibleToAttribute 创建一个能够访问另一个内部成员的“朋友”程序集。然后,您可以将绘图代码放入第二个组件中,并保持第一个组件的原始状态。

【讨论】:

    猜你喜欢
    • 2018-02-04
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    • 2021-03-25
    • 2020-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多