Dans notre projet ASP.NET MVC, nous avons une méthode d'extension HtmlHelper
pour générer une carte google statique.Est-ce une bonne pratique de faire une méthode d'extension qui n'utilise jamais l'objet étendu?
public static MvcHtmlString StaticMap(this HtmlHelper helper, string address, string alt, int width, int height, int zoom)
{
var src = new Uri("http://maps.google.com/maps/api/staticmap?markers=size:mid|color:red|{0}&zoom={1}&size={2}x{3}&maptype=roadmap&sensor=false".FormatInvariant(Uri.EscapeUriString(address), zoom, width, height));
var href = new Uri("http://maps.google.com/maps?f=q&source=s_q&hl=en&q={0}".FormatInvariant(Uri.EscapeUriString(address)));
var img = new TagBuilder("img");
img.MergeAttribute("src", src.ToString());
img.MergeAttribute("alt", alt);
var link = new TagBuilder("a") { InnerHtml = img.ToString() };
link.MergeAttribute("href", href.ToString());
return MvcHtmlString.Create(link.ToString());
}
Pour ce nouveau projet, nous essayons également de conserver la règle d'analyse de code. Maintenant, évidemment, l'analyse Visual Studio Code indique que nous devrions supprimer le paramètre helper
car il n'est pas utilisé. Cela m'a fait me demander si une méthode d'extension devrait toujours utiliser l'objet étendu et si ce n'est pas le cas, alors peut-être que ce ne devrait pas être une méthode d'extension.
Est-ce que quelqu'un a un lien vers une ligne directrice ou une explication qui m'aiderait à décider?
"Ne devriez-vous pas être autorisé à conserver la méthode d'extension maintenant que vous l'avez améliorée?" - Ma réponse à cette question est généralement oui, vous ne devriez pas ** ** conserver la méthode d'extension. En supprimant un paramètre, j'ai rendu le code plus simple et plus clair. Par exemple. Si je réussis à changer 'void doItFast (ce booster SpeedBooster, string IT)' void doItFast (string IT) ', je voudrais changer mes appels de' instBoost.doItFast (instIT) 'à doItFast (instIT)' . – Brian
@Brian. C'est un changement de rupture si la méthode est publique. C'est potentiellement beaucoup de changements, et donc beaucoup de bugs potentiels, si ce n'est pas public. En règle générale, je passerais probablement à la version plus propre, mais pas si elle était publique et que je n'avais pas de contrôle sur tout en utilisant du code, car je ne considérerais pas cela comme un changement important. –
Je suis d'accord avec tous vos points, même si ceux-ci sont plus sur les changements en général que ce changement spécifique. Cela dit, je pensais, peut-être incorrectement, que vous utilisiez ceci comme une expérience de pensée pour justifier l'utilisation d'une méthode d'extension sur une classe qui n'utilisait pas l'objet, pour appuyer votre argument selon lequel il était normal d'utiliser des méthodes d'extension. semble que l'objet fournit l'opération. Je n'étais pas d'accord avec ce point. – Brian