【发布时间】:2016-02-12 23:12:09
【问题描述】:
我有一个为多个网站提供服务的应用程序,并希望像这样设置颜色方案:
- 每个元素(链接、文本、标题等)都有一个默认的应用程序
- 可以为各个网站覆盖每个元素
- 如果元素设置为应用程序默认值,则应记住自定义颜色以供将来参考
网站配置.cs
public class WebsiteConfiguration
{
public ApplicationConfiguration ApplicationConfiguration { get; set; }
public string CustomLinkColour { get; set; }
public bool IsCustomLinkColourActive { get; set; }
public string LinkColour
{
get
{
return (IsCustomLinkColourActive ? CustomLinkColour : ApplicationConfiguration.DefaultLinkColour);
}
}
public string CustomTextColour { get; set; }
public bool IsCustomTextColourActive { get; set; }
public string TextColour
{
get
{
return (IsCustomTextColourActive ? CustomTextColour : ApplicationConfiguration.DefaultTextColour);
}
}
// ...and so on for each colour scheme element...
}
ApplicationConfiguration.cs
public class ApplicationConfiguration
{
public List<WebsiteConfiguration> WebsiteConfigurations { get; set; }
public string DefaultLinkColour { get; set; }
public string DefaultTextColour { get; set; }
//... and so on for each colour scheme element...
}
问题
工作量很大!
以上示例中只有 2 个配色方案元素,但可能有 50 多个。
此外,它还在视图文件中创建了大量工作,包括if else 块等。
尝试的解决方案
ColourSchemeItem 类管理逻辑。
public class ColourSchemeItem
{
public string DefaultColour { get; set; }
public string CustomColour { get; set; }
public bool IsCustomColourActive { get; set; }
public string ActiveColour
{
get
{
return (IsCustomColourActive ? CustomColour : DefaultColour);
}
}
}
然后WebsiteConfiguration 就变得简单多了……
public class WebsiteConfiguration
{
public ApplicationConfiguration ApplicationConfiguration { get; set; }
public ColourSchemeItem Link { get; set; }
public ColourSchemeItem Text { get; set; }
// ...and so on for each colour scheme element...
}
但是...
但不知何故,我需要将默认颜色从ApplicationConfiguration 获取到ColourSchemeItem。我不知道怎么做。
如果
ColourSchemeItem包含对其父级的引用 -WebsiteConfiguration- 我会收到No Key Defined for Entity错误。如果 ColourSchemeItem 不包含对其父级的引用,我无法从
WebsiteConfiguration.ApplicationConfiguration访问默认颜色。- 我能想到的唯一其他选择是直接从
ColourSchemeItemclass 中访问数据库。如果要超过 50 个,我不想这样做。
【问题讨论】:
-
WebsiteConfiguration 和 ApplicationConfiguration 是 EF DB 类吗?为什么不将 ApplicationConfiguration 类创建为抽象类并让 WebsiteConfiguration 类继承自它?这样就可以避免很多if then。
-
是的。我会更新问题以使其更清楚。继承会节省我的代码吗?我想我仍然需要为每个项目声明 3 个属性(如上面的第一个代码示例)。这就是我要避免的
标签: c# asp.net-mvc parent-child