C# 是否有一个枚举会变得过于膨胀的点?
我已经将枚举定义为ASP.NET MVC应用程序模型对象的一部分 枚举称为“ContentTypes”,其外观如下所示:C# 是否有一个枚举会变得过于膨胀的点?,c#,asp.net-mvc,linq-to-sql,enums,model,C#,Asp.net Mvc,Linq To Sql,Enums,Model,我已经将枚举定义为ASP.NET MVC应用程序模型对象的一部分 枚举称为“ContentTypes”,其外观如下所示: public enum ContentTypes { [Description("News story")] NewsStory = 1, [Description("Article")] Article = 2 } [Description("x"), Route("y")] 现在,我计划向名为“Route”的枚举项添加另一组属性。此
public enum ContentTypes
{
[Description("News story")]
NewsStory = 1,
[Description("Article")]
Article = 2
}
[Description("x"), Route("y")]
现在,我计划向名为“Route”的枚举项添加另一组属性。此属性允许我将每个ContentType映射到可以处理它的URL
因此,在此之后,我将:
public enum ContentTypes
{
[Description("News story")]
[Route("news/item/{URLName}")]
NewsStory = 1,
[Description("Article")]
[Route("article/item/{URLName}")]
Article = 2
}
您认为枚举在这一点上变得太重了吗
是否最好将枚举项分解为(比如)类,然后为每个类赋予“Description”和“Route”属性?我个人认为枚举应该保持简单。在这里,不仅仅是一个助记符,我会考虑Fowler的“替换类型代码的状态/策略模式”。
因此,是的,我将转换为一个类。您可以组合属性,使其看起来更像这样:
public enum ContentTypes
{
[Description("News story")]
NewsStory = 1,
[Description("Article")]
Article = 2
}
[Description("x"), Route("y")]
如果你认为语法看起来更好。但是我同意Mitch的观点,这些类可能会做得更好,特别是如果将来可能需要添加另一个属性的话。您实际上是在尝试使用枚举来区分内容对象的多个变体,而不需要实际创建内容对象的多个版本 应用程序的行为很可能取决于枚举的设置。例如,您可能有如下内容:
public Content
{
private ContentTypes contentType;
public string ToString()
{
switch (contentType)
...
}
}
从可维护性的角度来看,这会让你发疯。而是考虑使用继承来获得您正在进行的行为:
public Content
{
public abstract string ToString();
}
public NewsStory : Content
{
public override string ToString() { /* Appropriate formatting of output */ }
}
public Article : Content
{
public override string ToString() { /* Appropriate formatting of output */ }
}
现在要真正想起来(使用合同设计的方法),考虑任何内容都有共同点的东西,并定义一个接口,例如图标。如果你这样做,你可以做如下事情:
List<IContent> myContent;
foreach (IContent ic in myContent) ic.ToString();
列出myContent;
foreach(myContent中的IContent ic)ic.ToString();