C# 重构具有内部静态属性的结构
我面临着一位前雇员相当多的课程。在检查代码时,我遇到了一个带有C# 重构具有内部静态属性的结构,c#,struct,properties,static,C#,Struct,Properties,Static,我面临着一位前雇员相当多的课程。在检查代码时,我遇到了一个带有内部静态属性的struct struct经常被使用。大多数属性只有get,但有些属性确实有set和get。结构大约有200行长,内部嵌套结构 我无法理解这个结构以及人们想用它实现什么 它没有经过测试,也没有文档让我想知道为什么这个人决定实现这样的东西 结构主要保存程序中使用的设置和路径 在我重构这段代码并称之为开发人员的“早期杰作”之前,我想检查一下,如果没有,也许我错了,在非常罕见的情况下使用这样的东西是一个相当合理的想法 我的问题
内部静态属性的struct
struct经常被使用。大多数属性只有get
,但有些属性确实有set
和get
。结构大约有200行长,内部嵌套结构
我无法理解这个结构以及人们想用它实现什么
它没有经过测试,也没有文档让我想知道为什么这个人决定实现这样的东西
结构主要保存程序中使用的设置和路径
在我重构这段代码并称之为开发人员的“早期杰作”之前,我想检查一下,如果没有,也许我错了,在非常罕见的情况下使用这样的东西是一个相当合理的想法
我的问题是:
为什么有人要使用具有公共静态属性的结构,以及有人如何摆脱它(可能是众所周知的重构或类似的),因为它在整个代码中都被使用(Visual Studio统计了约800个引用)
顺便说一句:
它不放在任何名称空间中
看起来这是为了配置。如果是这样的话,静态类会更有用
internal static class Configuration { ... }
struct
这样做既没有价值,也不惯用。至于他们为什么这么做……可能不是最伟大的开发者。我将把config类放在项目的根命名空间中,尽管他们可能不把它放在任何命名空间中,以避免在整个代码库中使用一些声明
如果全局/静态特性困扰您,我建议将整个内容转换为实例属性,并将其传递给需要它的内容。这样做,它变得更像一个配置服务——可能会完全删除setter并将执行设置的代码内部化。那样肯定会更糟糕
这也有助于依赖注入和可测试性,特别是当你在上面贴一个接口的时候。静态类是配置数据、数据库访问和类似情况的常见错误。这是如此普遍,甚至微软自己也做到了
但正如我所说:这是一个错误。如果你曾经因为一些后端更改而不得不替换代码——更不用说得到一个可变的后端了——它会回来咬你。一个需要实例化的类/结构,其实例被分配给一个静态字段,这是我所得到的最接近的类/结构。这样至少可以在运行时更改实例
至于他为什么使用结构而不是类:因为不需要实例化,这两种类型之间的差异在很大程度上是无关的。他可能是一个本地C++程序员。对于他们来说,struct和class之间唯一的区别是默认访问器是public还是private。IMO的候选对象。对我来说,这看起来像是某种帮助类的实现。它们是静态且返回设置的事实表明了这一点。内部作用域可能是因为他们只想从1程序集访问它?使用struct
并不是一个随意的设计决定,在这里它似乎被误用了。是的,同意@spender-这看起来像是一个真正的静态类
,任何struct
的使用都是误导性的,只会添加可混淆的struct
是邪恶的。转换为实例属性应该在转换为类之后进行。我完全同意。
internal static class Configuration { ... }