代码之家  ›  专栏  ›  技术社区  ›  johnc

开始解耦对象的最佳位置

  •  2
  • johnc  · 技术社区  · 16 年前

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

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

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

    哪里是最好的起点?

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

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

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

    有什么想法吗?

    4 回复  |  直到 16 年前
        1
  •  2
  •   Steven A. Lowe    16 年前

    如果你能在合理的时间内完成整个过程,那就从基础开始,把整个过程都做完;在你完成之前,应用程序将被损坏

    如果你必须在这段时间内让应用程序保持运行,那么从顶部开始,一次完成几个课程

    我也会从自下而上的角度考虑,但怀疑这是一种实用的实施方式,因为它可能会打破一切,比其他两种方法需要更长的时间,但你的里程可能会有所不同;-)

    基本问题是:

    • 每种方法需要多长时间?
    • 每种策略最终都会产生相同的最终代码吗?
    • 在转换完成时保持应用程序正常工作有多重要?
    • 你有足够的单元测试来信任大规模的重构吗?
        2
  •  1
  •   Uri    16 年前

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

    该系列中的第一篇论文是戈丁和米利的 “使用伽罗瓦晶格构建和维护分析级类层次结构” (谷歌,你会找到PDF), 随后,有一系列关于不同技巧的论文(见引用本文的论文)。

        3
  •  1
  •   grepsedawk    16 年前

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

        4
  •  1
  •   Gishu    16 年前

    我想说

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

    开始吧。..而不是花BDUF时间试图弄清楚 这个 方式。天会晴的。当然,拥有一个由优质AT组成的安全网至关重要。