使用重复代码 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>();
这个简单的更改将允许您无限制地设置这些设置。您还可以在一个地方更改分配给它的实例。事实上,由于这没有被标记为只读,您甚至可以 甚至在运行时更改即时 。
我的代码库有几个不同的静态 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>();
这个简单的更改将允许您无限制地设置这些设置。您还可以在一个地方更改分配给它的实例。事实上,由于这没有被标记为只读,您甚至可以 甚至在运行时更改即时 。