这是一个C#问题,但实际上可能与语言无关
我继承了一个大型对象模型(100多种类型),其中有一个对象的层次结构,它们拥有所有共享基础的其他类型对象的0..n(其中有一个'相对'严格的类型层次结构)
我想开始通过继承来解耦这些对象,将基于IoC的系统组合在一起,开始实现一些比现有更深的单元测试。
哪里是最好的起点?
我可以从层次结构的顶部开始,这很简单,但是起初的好处最少,并且在我进一步向下发展之前会非常直言不讳,但这需要我实施一些条款。基础对象重载函数签名以接受基接口,直到我获得完全覆盖。
我可以从层次结构的底部开始,这将更加棘手,因为那里的类之间有更多的交互,但会“迫使”我们对重构有更全面的看法。
我也可以从Base对象(所有对象继承的对象)开始,它们会在逻辑点启动进程,但几乎可以肯定会创建一个不可编译的应用程序,直到我们交换掉所有对象的继承权和函数调用。
有什么想法吗?
答案 0 :(得分:2)
如果你能在合理的时间内完成整个过程,那就从基础开始,然后完成整个过程;应用程序将被破坏,直到您完成
如果您必须让应用程序同时工作,请从顶部开始,一次按下几个班级
我也会看到自下而上的观点,但是怀疑这将是一种实用的实施方式,因为它可能会破坏一切并且比其他两种方法花费的时间更长,但是你的里程可能会变化; - )
基本问题是:
答案 1 :(得分:1)
这可能有点过于学术性,但是在九十年代中期有很多关于如何自动重构大类层次结构的研究,例如通过弄清楚常用的接口等等。虽然这可能无法解决你的问题,它可能会给你一个很好的选择,从哪里开始,或者至少对这些问题有一些有趣的看法。
该链中的第一篇论文是Godin和Mili “使用Galois Lattices构建和维护分析级别的层次结构” (谷歌,你会发现PDF), 关于不同的技巧,有一系列的以下论文(见引用本文的论文)。
答案 2 :(得分:1)
从顶部开始创建较小的层次结构,在向下移动时使用委派而不是继承。使用策略模式从层次结构中的类中删除行为。
答案 3 :(得分:1)
我会说
刚刚开始......而不是花费BDUF时间试图找出 方式......它会清除。当然,拥有良好AT的安全网是至关重要的。