我正在为学习目的创建数据结构(B-Tree)的实现。
我想将所需的类放入它自己的程序集中,并且只引用并使用那里最少的.NET命名空间。当然,我也会通过私有或内部隐藏尽可能多的数据和代码,以便课程看起来干净。
在进行开发,调试等工作时,我会将树的图形表示绘制到位图上并将其转储到磁盘上,但要做到这一点,我需要System.Drawing,... 2D,... Imaging,.. .Text作为命名空间。那些不应该是纯数据结构代码的一部分。此绘图代码应为“其他地方”
我完成了开发,一切正常并且完美无缺。我可以看到我的树在我的磁盘上成长并缩小为图片列表,但我对解决方案布局不满意。我想我太过分了解每个集会的担忧。
目前,绘图代码是windows窗体代码的一部分,并且我将一些公共属性放入数据结构类中,以允许绘图代码获取绘制时所需的值。
现在我如何创建一个项目,类和程序集,可以将树绘制到位图而不会损害纯数据结构类?
当树确定改变了它的结构并且应该重新显示时,它会引发事件(或调用委托?)。负责绘图的程序集需要这些调用,但也需要访问树的私有细节才能显示它。
反思是我有点熟悉的,但听起来有点过头了。
我可以进行DEBUG和RELEASE构建,并使用条件编译(## IFDEBUG?)封装绘图部分,但这仍然意味着我需要在数据结构代码中包含大量代码(和编译提示)。 / p>
同一个汇编中的部分类?仍然需要引用System.Drawing
。
还有其他建议吗?
由于 拉尔夫
答案 0 :(得分:1)
这一般是一个难题,但您可以做的一件事就是只将internal
成员暴露给您的绘图代码,以便其他代码不需要知道它们的存在。您可以使用InternalsVisibleToAttribute
创建一个能够访问另一个内部成员的“朋友”程序集。然后,您可以将绘图代码放入第二个程序集中,并使主要原始程序保持原始状态。