什么应该去HtmlHelper,拥有新的帮助,或查看引擎扩展?

时间:2014-01-07 19:19:35

标签: asp.net-mvc razor

这更像是设计,最佳实践问题,以及部分分离关注问题。我希望你能帮我决定(并让我对好设计的迷恋)。问题基本上是关于什么应该去HtmlHelper,自己的帮手(例如,MyFancyHelper),以及什么应该去查看引擎扩展?

我们使用APS.NET MVC5 / Razor,在某些情况下,我们使用HtmlHelper扩展,自己的帮助器和WebViewPage构造。截至目前,纯文本输出用于查看引擎扩展,例如,我们的本地化就是这样完成的:

public abstract class WebViewPage<TModel> : System.Web.Mvc.WebViewPage<TModel>
{
    private ILocalizationService _localizationService;

    public override void InitHelpers()
    {
        base.InitHelpers();

        _localizationService = (ILocalizationService)System.Web.Mvc.DependencyResolver.Current.GetService(typeof(ILocalizationService));
    }

    public string LS(string key, params string[] parameters)
    {
        return _localizationService.GetStringOrDefault(key, parameters);
    }
}

所以在cshtml中,我们只能使用@LS("Domain.Subdomain.Text")

我们使用HtmlHelper来处理简短且重复的HTML代码,例如自定义复选框:@Html.CustomCheckbox()

基本上,经验法则是 - 如果产品是原始文本,基于某些参数,它将转到查看引擎扩展(WebViewPage),如果产品是HTML片段,则转到HtmlHelper。但是 - 介于两者之间的事情 - 例如,

<meta name="description" content="@???" />

在HtmlHelper中它感觉不对(它根本不是html代码),我也认为它甚至不属于视图引擎扩展(它太具体) - 并且创建自己的帮助器(例如MetaHelper)两三种方法看起来有点过分。我见过几个这样的例子:

<meta name="description" content="@(Html.MetaDescription())" />

但感觉不对,输出不是html标记。

问题是 - 你认为我刚刚描述的内容是否有意义,在这种情况下你会做什么 - 你会创建几个特定的​​帮助者,你是否会将这些方法保留在HtmlHelper中,你会创建不同的专业的助手,还是你会做别的什么?

0 个答案:

没有答案