Jon*_*han 2 c# asp.net-mvc enums model linq-to-sql
我已经将Enum定义为ASP.NET MVC应用程序的模型对象的一部分.
Enum被称为'ContentTypes',看起来像这样:
public enum ContentTypes
{
[Description("News story")]
NewsStory = 1,
[Description("Article")]
Article = 2
}
Run Code Online (Sandbox Code Playgroud)
现在我计划在名为"Route"的枚举项中添加另一组属性.此属性允许我将每个ContentType映射到可以处理它的URL.
所以在这之后我会:
public enum ContentTypes
{
[Description("News story")]
[Route("news/item/{URLName}")]
NewsStory = 1,
[Description("Article")]
[Route("article/item/{URLName}")]
Article = 2
}
Run Code Online (Sandbox Code Playgroud)
你觉得这个词汇的重量太大了吗?
将枚举项分解为类,然后给每个类一个"描述"和"路由"属性会更好吗?
您真的尝试使用Enum来区分Content对象的多个变体,而不会遇到实际创建Content对象的多个版本的麻烦.
可以肯定的是,应用程序的行为将取决于枚举设置的内容.例如,您可能会遇到以下情况:
public Content
{
private ContentTypes contentType;
public string ToString()
{
switch (contentType)
...
}
}
Run Code Online (Sandbox Code Playgroud)
从可维护性的角度来看,这会让你发疯.请考虑使用继承来获取您所追求的行为:
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 */ }
}
Run Code Online (Sandbox Code Playgroud)
现在要真正得到想象(并使用"按合同设计"方法),考虑任何内容的共同点并定义一个接口,例如IContent.如果你这样做,你可以做以下事情:
List<IContent> myContent;
foreach (IContent ic in myContent) ic.ToString();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
226 次 |
最近记录: |