Tengo una clase con algunas funciones que, en realidad, son solo métodos "auxiliares" que el código del cliente podría hacer con otras propiedades/métodos de acceso público, y no estoy seguro de si debo definirlas como propiedades con un getter , métodos de instancia o métodos estáticos que toman la instancia como parámetro. Además, también obtuve una interfaz extraída de la clase que se usa prácticamente en todas partes excepto en la construcción, para permitir que mi código use cualquier clase implementada en la interfaz.Métodos auxiliares en C#: ¿Estático o no estático?
La pregunta es, ¿cuál es el mejor desde el punto de vista del diseño? Por ejemplo, como medio de conseguir la primera de esta clase:
class Person : IPerson {
private string name;
public string Name { get { return this.name; } }
// Property with getter
public string Initial { get { return this.name.Substring(0,1); } }
// Instance method
public string GetInitial { return this.name.Substring(0,1); }
// Static method
public static string GetInitial(IPerson person) {
return person.Name.Substring(0,1);
}
}
La propiedad se presta a más corto código de cliente, más fácil de leer, pero requeriría cualquier implementación contra IPerson a escribir su propia aplicación, al igual que la instancia método.
El método estático significaría que las clases de implementación no necesitarían escribir las suyas propias, y mi código puede garantizar cómo se determina la inicial basándose en el nombre, pero significa que no puede estar en la interfaz y el código del cliente un poco más detallado.
¿Simplemente se reduce a si no es una buena idea permitir que las clases implementadas especifiquen cómo se calculan los métodos auxiliares?
EDITAR: Mención aparte, ¿por qué SO no me permite agregar la etiqueta de mejores prácticas?
Parece que todavía no hay ninguna etiqueta de mejores prácticas. Necesita al menos 1500 reputación para crear nuevas etiquetas. – M4N
Eso es raro ... definitivamente lo fue, lo he usado en el pasado. – Flynn1179
La muerte de las metaetiquetas (por ejemplo, mejores prácticas): http://blog.stackoverflow.com/2010/08/the-death-of-meta-tags/ – M4N