.net - 开始解耦对象的最佳位置

标签 .net language-agnostic oop decoupling

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

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

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

最好从哪里开始?

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

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

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

有什么想法吗?

最佳答案

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

如果您必须同时保持应用程序正常运行,请从顶部开始,一次向下处理几个类

我也会考虑自下而上的视角,但怀疑这是否是一种实用的实现方法,因为它可能会破坏一切,并且比其他两种方法需要更长的时间,但您的里程可能会有所不同;-)

基本问题是:

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

关于.net - 开始解耦对象的最佳位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/342949/

相关文章:

language-agnostic - 如何在 Web 应用程序中显示浏览器的本地时间

language-agnostic - 建议处理基于图 block 的系统上的自由运动的逻辑

c# - 优化 SQL 连接性能?

c# - Java 中的 DataTable 等价物

.net - Visual Studio 社区 2015 更新 1 生成问题

实现动态滚动的算法

php - 在 PHP 中使用 mysql_fetch_assoc() 构建继承对象

具有抽象类的 C++ 组合

oop - 如何在 future builder (Flutter/Dart)中等待变量不等于null?

java - .Net 可以加载 IL 文件(例如 java 类文件),还是必须加载整个程序集?