Métodos auxiliares em C #: estático ou não estático?
Eu tenho uma classe com algumas funções que, realisticamente, são apenas métodos 'auxiliares' que o código do cliente poderia fazer com outras propriedades / métodos do acessador público, e não sei se devo defini-las como propriedades com um getter, instância métodos ou métodos estáticos que tomam a instância como um parâmetro. Além disso, também tenho uma interface extraída da classe que é usada praticamente em todos os lugares, exceto na construção, para permitir que meu código use qualquer classe implementada na interface.
A questão é: qual é o melhor do ponto de vista do design? Por exemplo, como um meio de obter a inicial dessa classe:
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);
}
}
A propriedade se presta a um código de cliente mais curto e legível, mas exigiria que qualquer pessoa que implementasse o IPerson gravasse sua própria implementação, como faria o método da instância.
O método estático significaria que a implementação de classes não precisaria escrever por conta própria, e meu código pode garantir como a inicial é determinada com base no nome, mas significa que não pode estar na interface e o código do cliente é um pouco mais detalhado .
Apenas se resume a não ser uma boa ideia permitir que as classes de implementação especifiquem como os métodos auxiliares são calculados?
EDIT: Por outro lado, por que SO não me permite adicionar a tag de práticas recomendadas?