C# 将属性合并到一个属性中还是拆分为多个属性?

C# 将属性合并到一个属性中还是拆分为多个属性?,c#,attributes,C#,Attributes,在C#中,我开始使用属性来定义我的类。我正在编写一个插件系统,其中类需要一些元数据才能被识别为插件 我不知道VisualStudio扩展是如何做到这一点的,但我需要一个意见或设计规则来告诉我是应该创建一个具有许多(可选)参数的属性,还是使用更多的属性和更少的参数 例如,决策涉及以下两个不同的代码段: 单个属性,多个属性: [Plugin("Image Tools", Author = "PacMani", Description = "blahblah", Website = "http

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

我不知道VisualStudio扩展是如何做到这一点的,但我需要一个意见或设计规则来告诉我是应该创建一个具有许多(可选)参数的属性,还是使用更多的属性和更少的参数

例如,决策涉及以下两个不同的代码段:

单个属性,多个属性:

[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
{
    // ...
}
甚至是将“作者”和“描述”拆分为单个属性的版本


我的想法是不拆分按主题分组的属性。但这些团体从哪里开始和结束?以上属性都是关于插件的组“详细信息”或“描述性信息”。

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

  • 它们都与一个概念——插件相联系
  • 它们只提供信息

如果每个属性都有一些逻辑连接,那么可能会有所不同,然后会考虑拆分它们。p> 还有另外一种情况,您可能愿意将它们分割成单独的属性,以防您可以在逻辑上分离插件的类型。因此,您可以拥有一个仅具有基本属性的基本PluginAttribute,例如ImagePluginAttribute属性,它继承自PluginAttribute并具有一些附加属性,等等。


但在您的案例中,我不会按属性(WebsiteAttribute、AuthorAttribute、VersionAttribute)将其划分为单独的属性

可能会误解这个问题,但为什么不使用配置文件呢?在这种情况下似乎比属性更合适不是吗?
您可以通过继承将类识别为插件,这些属性中的其余元数据似乎只是元数据,应该在类或配置中定义为属性以便于访问(如果它们在代码之外更改,例如网站).

是否有任何逻辑与这些属性相关,或者它们只是信息性的?在上面的示例中,它们需要在IDE中提供有关插件的信息,并在最后加载它们(类似于VS info对话框)。我可以想象,稍后会添加更多属性,例如“Version”,这可能不是可选的。如果每次使用其中任何一个属性时都会使用它们,那么您应该使用单个属性。好的,这就是第一个示例,因为它们是在获取插件信息时加载的。您同意添加另一个属性,如“[FileExtensions(“.png“,“.jpg”)]来描述它可以处理的文件类型?它们不应该在外部更改,它们只描述编译后的类。