Comment voulez-vous factoriser ce Asp.net MVC 2 Html Aide?
-
29-09-2019 - |
Question
Question rapide.
Comment qualifieriez-vous factoriser ce Asp.net MVC 2 HtmlHelper? Plus précisément, il serait judicieux d'utiliser la classe TagBuilder dans ce scénario?
public static MvcHtmlString BusinessDisplayContacts(this HtmlHelper helper, string phone, string cellPhone,
string fax, string website, string email, bool hideEmail)
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("<ul>");
if (!string.IsNullOrEmpty(phone)) {
sb.AppendLine("<li class=\"tel\">");
sb.AppendLine("<span class=\"type\">Work</span>:");
sb.AppendFormat("<span class=\"value\">{0}</span>",phone);
sb.AppendLine("</li>");
}
if (!string.IsNullOrEmpty(cellPhone)) {
sb.AppendLine("<li class=\"tel\">");
sb.AppendLine("<span class=\"type\">Cell</span> Phone:");
sb.AppendFormat("<span class=\"value\">{0}</span>",cellPhone);
sb.AppendLine("</li>");
}
if (!string.IsNullOrEmpty(fax)) {
sb.AppendLine("<li class=\"tel\">");
sb.AppendLine("<span class=\"type\">Fax</span>:");
sb.AppendFormat("<span class=\"value\">{0}</span>",fax);
sb.AppendLine("</li>");
}
if (!string.IsNullOrEmpty(website)) {
sb.AppendFormat("<li><a class=\"url\" href=\"{0}\">{0}</a></li>",website);
}
if (!hideEmail && !string.IsNullOrEmpty(email)) {
sb.AppendFormat("<li><a class=\"email\" href=\"mailto:{0}\">{0}</a></li>",email);
}
sb.AppendLine("</ul>");
if (sb.Length < 10)
{
return MvcHtmlString.Create("");
}
else {
return MvcHtmlString.Create(sb.ToString());
}
}
Merci d'avance.
MISE À JOUR:
Merci pour tous les commentaires constructifs.
En fin de compte, j'ai décidé de déplacer le code ci-dessus dans une vue partielle fortement typé selon la suggestion de @ Reine3.
La solution
Une chose que je vois des gens qui manque beaucoup, utilise C # verbatim des chaînes pour des trucs comme ça ... par exemple.
sb.AppendLine("<li class=\"tel\">");
sb.AppendLine("<span class=\"type\">Work</span>:");
sb.AppendLine(string.Format("<span class=\"value\">{0}</span>",phone));
sb.AppendLine("</li>");
peut être transformé en
sb.AppendFormat(@"
<li class=""tel"">
<span class=""type"">Work</span>: <span class=""value"">{0}</span>
</li>
", phone);
ce qui est beaucoup plus lisible.
Une autre chose: je mettrais toutes les chaînes + bool l'intérieur d'un objet, comme ContactInfo
ou quelque chose, en changeant le Signatur de votre aide pour BusinessDisplayContacts(this HtmlHelper helper, ContactInfo info)
- cette façon, vous serez en mesure d'ajouter / supprimer / modifier les numéros de téléphone et les conditions sans rupture le code existant.