【发布时间】: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