Это - лучшая практика для использования нескольких разработчиков тега или StringBuilder для генерации Тега object? ASP.NET MVC

Я записал, что помощник HTML для генерации YouTube встраивает ссылку. Это имеет 3 параметра, YouTubeID, Ширину и Высоту. Я первоначально записал это с StringBuilder, но затем я решил попытаться использовать TagBuilder (хорошо, несколько из них).

Вот два различных возврата:

//Tag Builder
public static string YouTube(this HtmlHelper helper, string youtubeId, string width, string height)
{
    const string vidSuffix = "&hl=en_US&fs=1";
    var url = "http://www.youtube.com/v/" + youtubeId + vidSuffix;

    var objBuilder = new TagBuilder("object");
    objBuilder.MergeAttribute("width",width);
    objBuilder.MergeAttribute("height",height);

    var movParamBuilder = new TagBuilder("param");
    movParamBuilder.MergeAttribute("name","movie");
    movParamBuilder.MergeAttribute("value",url);

    var fsParamBuilder = new TagBuilder("param");
    fsParamBuilder.MergeAttribute("name","allowFullScreen");
    fsParamBuilder.MergeAttribute("value","true");

    var saParamBuilder = new TagBuilder("param");
    saParamBuilder.MergeAttribute("name", "allowscriptaccess");
    saParamBuilder.MergeAttribute("value", "always");

    var embedBuilder = new TagBuilder("embed");
    embedBuilder.MergeAttribute("src",url);
    embedBuilder.MergeAttribute("type", "application/x-shockwave-flash");
    embedBuilder.MergeAttribute("allowscriptaccess","always");
    embedBuilder.MergeAttribute("allowfullscreen","true");
    embedBuilder.MergeAttribute("width",width);
    embedBuilder.MergeAttribute("height",height);

    objBuilder.InnerHtml = movParamBuilder.ToString(TagRenderMode.Normal) +
                           fsParamBuilder.ToString(TagRenderMode.Normal) +
                           saParamBuilder.ToString(TagRenderMode.Normal) +
                           embedBuilder.ToString(TagRenderMode.Normal);

    return objBuilder.ToString(TagRenderMode.Normal);
}


//StringBuilder
public static string YouTube(this HtmlHelper helper, string youtubeId, string width, string height)
{
    const string vidSuffix = "&hl=en_US&fs=1";
    var url = "http://www.youtube.com/v/" + youtubeId + vidSuffix;

    sb.AppendFormat("<object width=\"{0}\" height=\"{1}\">", width, height);
    sb.AppendLine();
    sb.AppendFormat("<param name=\"movie\" value=\"{0}\">",url);
    sb.AppendLine();
    sb.Append("</param><param name=\"allowFullScreen\" value=\"true\">");
    sb.AppendLine();
    sb.AppendFormat("</param><param name=\"allowscriptaccess\" value=\"always\">");
    sb.AppendLine();
    sb.AppendFormat(
        "</param><embed src=\"{0}\" type=\"application/x-shockwave-flash\" allowscriptaccess=\"always\" allowfullscreen=\"true\" width=\"{1}\" height=\"{2}\">",
        url, width, height);
    sb.AppendLine();
    sb.Append("</embed></object>");

    return sb.ToString();
}

Они оба генерируют тот же самый код, кроме StringBuilder добавляет разрыв строки после каждого раздела.

Какие-либо мысли, на которых было бы лучше, или если это даже имеет значение?Спасибо!

1
задан Anders 21 July 2010 в 18:46
поделиться

1 ответ

Я думаю, я бы еще больше рефакторизовал его, чтобы иметь метод, возможно, приватный, для создания каждого из тегов параметров, уменьшая дублирование кода, в противном случае я предпочитаю StringBuilder.

private static string Param( this HtmlHelper helper, string name, string value )
{
    var tagBuilder = new TagBuilder("param"); 
    tagBuilder .MergeAttribute("name", name); 
    tagBuilder .MergeAttribute("value", value);
    return tagBuilder.ToString( TagRenderMode.Normal );
}

public static string YouTube(this HtmlHelper helper, string youtubeId, string width, string height) 
{ 
    const string vidSuffix = "&amp;hl=en_US&amp;fs=1"; 
    var url = "http://www.youtube.com/v/" + youtubeId + vidSuffix; 

    var objBuilder = new TagBuilder("object"); 
    objBuilder.MergeAttribute("width",width); 
    objBuilder.MergeAttribute("height",height);  

    var embedBuilder = new TagBuilder("embed"); 
    embedBuilder.MergeAttribute("src",url); 
    embedBuilder.MergeAttribute("type", "application/x-shockwave-flash"); 
    embedBuilder.MergeAttribute("allowscriptaccess","always"); 
    embedBuilder.MergeAttribute("allowfullscreen","true"); 
    embedBuilder.MergeAttribute("width",width); 
    embedBuilder.MergeAttribute("height",height); 

    objBuilder.InnerHtml = helper.Param( "movie", url ) + 
                           helper.Param( "allowFullScreen", "true" ) + 
                           helper.Param( "allowscriptaccess", "always" ) + 
                           embedBuilder.ToString(TagRenderMode.Normal); 

    return objBuilder.ToString(TagRenderMode.Normal); 
}
2
ответ дан 2 September 2019 в 22:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: