2

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

我继承了一个大型对象模型(100 多种类型),其对象层次结构“拥有”0..n 个其他类型对象,这些对象都共享一个基础(其中存在“相对”严格的类型层次结构)。

我想开始通过继承来解耦这些对象,以组合一个基于 IoC 的系统,以开始实施一些比目前更深入的单元测试。

最好的起点是哪里?

我可以从层次结构的顶部开始,这很简单,但最初的好处最少,并且在我进一步深入链条之前会非常死记硬背,但这需要我在基础对象上实现一些重载函数签名以接受基本接口,直到我得到完全覆盖。

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

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

有什么想法吗?

4

4 回答 4

2

如果你能在合理的时间内完成整个过程,那就从基础开始,把整个事情都走一遍;该应用程序将被破坏,直到您完成

如果您必须同时保持应用程序正常运行,请从顶部开始,一次完成几门课程

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

基本问题是:

  • 每种方法需要多长时间?
  • 每种策略最终会产生相同的最终代码吗?
  • 在转换完成时保持应用程序正常工作有多重要?
  • 你有足够的单元测试来信任大规模的重构吗?
于 2008-12-05T05:05:13.057 回答
1

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

该链中的第一篇论文是 Godin 和 Mili 的“使用 Galois Lattices 构建和维护分析级类层次结构”(谷歌,你会找到 PDF),还有一系列后续论文(参见引用此的论文)不同的技巧。

于 2008-12-05T05:05:45.457 回答
1

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

于 2008-12-05T05:06:29.853 回答
1

我会说

  • 好好看看现有的设计......制定一个方法......让一台电脑尝试一下。(Kent Beck 的指导方针.. 任何设计讨论都不应超出它的范围...... 30 分钟。一旦你遇到障碍,抓住一台机器,对其进行编码,看看它是否有效。)
  • 经过一个小时的时间框(或更多根据口味),如果你觉得你正在取得进步......坚持。否则回到绘图板。

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

于 2008-12-05T06:44:53.103 回答