开始解耦对象的最佳位置

时间:2008-12-05 04:56:33

标签: .net language-agnostic oop decoupling

这是一个C#问题,但实际上可能与语言无关

我继承了一个大型对象模型(100多种类型),其中有一个对象的层次结构,它们拥有所有共享基础的其他类型对象的0..n(其中有一个'相对'严格的类型层次结构)

我想开始通过继承来解耦这些对象,将基于IoC的系统组合在一起,开始实现一些比现有更深的单元测试。

哪里是最好的起点?

我可以从层次结构的顶部开始,这很简单,但是起初的好处最少,并且在我进一步向下发展之前会非常直言不讳,但这需要我实施一些条款。基础对象重载函数签名以接受基接口,直到我获得完全覆盖。

我可以从层次结构的底部开始,这将更加棘手,因为那里的类之间有更多的交互,但会“迫使”我们对重构有更全面的看法。

我也可以从Base对象(所有对象继承的对象)开始,它们会在逻辑点启动进程,但几乎可以肯定会创建一个不可编译的应用程序,直到我们交换掉所有对象的继承权和函数调用。

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

如果你能在合理的时间内完成整个过程,那就从基础开始,然后完成整个过程;应用程序将被破坏,直到您完成

如果您必须让应用程序同时工作,请从顶部开始,一次按下几个班级

我也会看到自下而上的观点,但是怀疑这将是一种实用的实施方式,因为它可能会破坏一切并且比其他两种方法花费的时间更长,但是你的里程可能会变化; - )

基本问题是:

  • 每种方法需要多长时间?
  • 每种策略最终会产生相同的最终代码吗?
  • 在完成转换的过程中保持应用程序正常运行有多重要?
  • 您是否有足够的单元测试来信任大规模的重构?

答案 1 :(得分:1)

这可能有点过于学术性,但是在九十年代中期有很多关于如何自动重构大类层次结构的研究,例如通过弄清楚常用的接口等等。虽然这可能无法解决你的问题,它可能会给你一个很好的选择,从哪里开始,或者至少对这些问题有一些有趣的看法。

该链中的第一篇论文是Godin和Mili “使用Galois Lattices构建和维护分析级别的层次结构” (谷歌,你会发现PDF), 关于不同的技巧,有一系列的以下论文(见引用本文的论文)。

答案 2 :(得分:1)

从顶部开始创建较小的层次结构,在向下移动时使用委派而不是继承。使用策略模式从层次结构中的类中删除行为。

答案 3 :(得分:1)

我会说

  • 好好看看现有的设计......制定一种方法......让计算机试一试。(Kent Beck的指南......没有设计讨论应该超越它的范围。 .. 30分钟。一旦你到达障碍物,抓住一台机器,编码并查看它是否有效。)
  • 如果你觉得自己正在取得进步,经过一个小时(根据口味的话)的时间表......坚持下去。还有回到绘图板。

刚刚开始......而不是花费BDUF时间试图找出 方式......它会清除。当然,拥有良好AT的安全网是至关重要的。