在一个属性中组合属性还是拆分为更多属性?

时间:2014-01-24 18:54:52

标签: c# attributes

在C#中,我开始使用属性来定义我的类。我正在编写一个插件系统,其中类需要将一些元数据识别为插件。

我完全不知道Visual Studio Extensions是如何做到的,但是我需要一个意见或设计规则来告诉我是否应该创建一个包含许多(可选)参数的属性,或者使用更多参数较少的属性。 / p>

例如,决定是关于这两个不同的代码片段:

单一属性,许多属性:

[Plugin("Image Tools", Author = "PacMani", Description = "blahblah",
    Website = "http://blahblah.contoso.com/", Image = "Icon32x32.png")]
public class ImagePlugin : Plugin
{
    // ...
}

[Plugin("Image Tools", Author = "PacMani", Description = "blahblah")]
[Website("http://blahblah.contoso.com/")]
[Image("Icon32x32.png")]
public class ImagePlugin : Plugin
{
    // ...
}

甚至是将“作者”和“描述”分成单个属性的版本。

我的想法是不拆分主题分组的属性。但这些团体的起点和终点在哪里?以上属性是关于插件的所有“详细信息”或“描述性信息”组。

2 个答案:

答案 0 :(得分:0)

在您的情况下,我建议将所有这些信息丰富的数据作为一个属性。为什么?因为:

  • 它们都与一个概念 - 插件
  • 相关联
  • 他们只是提供信息

如果将某些逻辑与每个属性相关联,那么可能会有所不同 - 然后会考虑拆分它们。

还有一种情况,您可能愿意将它们拆分为单独的属性 - 以防您可以在逻辑上分离插件的类型。那么你可以有一个只有基本属性的基础PluginAttribute,例如ImagePluginAttribute属性,它继承自PluginAttribute并具有一些其他属性等。 但是我不会在你的情况下通过属性(WebsiteAttribute,AuthorAttribute,VersionAttribute)将它分成单独的属性。

答案 1 :(得分:0)

可能误解了问题,但为什么不使用配置文件?似乎比较合适,在这种情况下属性没有? 您可以通过继承将类识别为插件,这些属性中的其余元数据看起来就像是元数据,应该被定义为类或配置中的属性以便于访问(如果它们在代码之外更改 - 东西喜欢网站)。