使用重复代码 c# 重构静态 类

refactoring static classes with duplicate code c#

我的代码库有几个不同的静态 classes(例如:FooIO、BarIO),它们具有相同的方法。这些方法在功能上的唯一区别是配置对象(例如:Foo、Bar)和文件名。

我将这些方法的实际实现拉到一个名为 BaseIO 的通用 class 中。

在每个 IO class 中,我有一个静态构造函数,它使用适当的 class 和文件名创建一个 BaseIO 实例:

static FooIO()
    {
        configIO = new BaseIO<Foo>("Foo.xml");
    }

对于我调用该实例的所有方法:

public static void Save(Foo config)
    {
        configIO.Save(config);
    }

然而,IO classes 之间仍然有相当多的重复代码,因为除了构造函数之外的所有内容都是相同的。

是否可以在不破坏现有依赖关系的情况下进一步删除这些 class 中的重复代码?

使用静态共享数据是一个 class 逻辑错误。除非它是常量或至少是只读的(运行时常量),否则您应该抵制这种冲动。它是一种在 95% 的情况下都能正常工作并且非常容易做到的事情,所以当它停止工作时,你就已经接受了它。

只需制作一个需要实例化的普通class即可。然后将实例分配给静态字段:

static GenericIO<Foo> FooIO = new GenericIO<Foo>();

这个简单的更改将允许您无限制地设置这些设置。您还可以在一个地方更改分配给它的实例。事实上,由于这没有被标记为只读,您甚至可以 甚至在运行时更改即时