前一名员工面对相当多的课程。在检查代码的作用时,我遇到了struct
internal static
属性。
结构经常被使用。大多数属性只有get
,但有些属性有set
和get
。结构大约有200行,内嵌有嵌套的内部结构。
我无法围绕这个结构以及这个人想要实现的目标。
它没有经过测试,也没有文件让我想知道为什么这个人决定实施这样的事情。
该结构主要包含整个程序中使用的设置和路径。
在我重构这段代码并将其称为开发人员的“早期杰作”之前,我想检查一下,如果不是,我错了,在极少数情况下使用这样的东西是一个相当合理的想法。
我的问题是: 为什么有人会使用带有公共静态属性的结构,以及有人会如何摆脱它(可能是一个众所周知的重构或类似的东西),因为它在整个代码中使用(由Visual Studio计算约800个引用) < / p>
顺便说一句: 它没有放在任何名称空间
internal struct ConfigurationPaths
{
private static string _pathConfig;
private static string _pathConfigUI;
private static string _pathConfigUI_Default;
private static string _pathConfig_DataToView;
//... removed the following lines due to readability in the question
internal static string AppPath
{
get
{
Module[] mod = Assembly.GetExecutingAssembly().GetModules();
return Path.GetDirectoryName(mod[0].FullyQualifiedName);
}
}
internal static string FilePath
{
set { _pathConfig = value; }
get { return _pathConfig; }
}
internal static string UserInterface
{
set { _pathConfigUI = value; }
get { return _pathConfigUI; }
}
internal static string UserInterface_Default
{
get
{
if (_pathConfigUI_Default == null)
{
String appPath = AppPath.AppendPathSeperatorIfNeeded();
_pathConfigUI_Default = String.Format("{0}files{1}config{1}ui{1}default.ux", appPath, Path.DirectorySeparatorChar);
}
return _pathConfigUI_Default;
}
}
internal static string UserInterface_GridView
{
set { _pathConfig_DataToView = value; }
get { return _pathConfig_DataToView; }
}
//... removed the following lines due to readability in the question
}
答案 0 :(得分:2)
看起来意图是配置。如果是这种情况,静态类会更有用
myInt
执行此操作的internal static class Configuration { ... }
不提供任何价值,也不是惯用语。至于为什么他们这样做......可能只是不是最伟大的开发者。我会将配置类放在项目的根命名空间中,尽管它们可能将它放在没有命名空间的地方,以避免在整个代码库中发生一些struct
声明。
如果全局/静态性质困扰你,我建议将整个事物转换为实例属性并将其传递给需要它的东西。这样做,它变得更像配置服务 - 可能完全删除setter并内化正在进行设置的代码。这肯定会更加OO。
这也适用于依赖注入和可测试性,特别是如果你在它上面打了一个接口。
答案 1 :(得分:1)
静态类是配置数据,DatabaseAccess和类似情况的一个相当常见的错误。它是如此常见,甚至微软本身也做到了at least once。
但正如我所说:这是一个错误。如果由于某些后端更改而必须更换代码 - 更不用说获得可变后端了 - 它会回来咬你。需要实例化的类/结构,将实例分配给静态字段是我得到的最接近的。这样至少可以在运行时更改实例。
至于他为什么使用结构而不是类:由于不需要实例化,两种类型之间的差异在很大程度上是无关紧要的。可能是他是一个本地的C ++程序员。对于他们来说,struct和class之间的唯一区别是默认访问者是公共访问者还是私人访问者。