Come si refactoring questo Html Helper Asp.net MVC 2?
-
29-09-2019 - |
Domanda
Domanda veloce.
Come ti refactoring questo Asp.net MVC 2 HtmlHelper? In particolare avrebbe senso utilizzare la classe TagBuilder in questo scenario?
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());
}
}
Grazie in anticipo.
UPDATE:
Grazie per tutti i commenti costruttivi.
Alla fine ho deciso di spostare il codice sopra in una vista parziale fortemente tipizzato come da @ di queen3 suggerimento.
Soluzione
Una cosa che vedo la gente manca un sacco, sta utilizzando C # testualmente stringhe per cose del genere ... per esempio.
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>");
può essere fatto in
sb.AppendFormat(@"
<li class=""tel"">
<span class=""type"">Work</span>: <span class=""value"">{0}</span>
</li>
", phone);
che è il modo più leggibile.
Un'altra cosa: vorrei mettere tutte quelle stringhe + bool all'interno di un oggetto, come ContactInfo
o qualcosa, cambiando il Signatur del vostro aiuto per BusinessDisplayContacts(this HtmlHelper helper, ContactInfo info)
- in questo modo si sarà in grado di aggiungere / rimuovere / modificare i numeri e le condizioni di telefono senza rottura codice esistente.