Pergunta

Estou projetando um novo sistema e tenho muitas interfaces que crescerão com o tempo com o sistema.Qual é a melhor prática para nomear essas interfaces

ISomethingV01
ISomethingV02
etc

e eu faço isso

public interface ISomething{
      void method();
}

então eu tenho que adicionar o método 2, então agora o que eu faço?

public interface ISomethingV2:ISomething{
      void method2();
}

ou da mesma forma?

Foi útil?

Solução

Idealmente, você não deveria alterar suas interfaces com muita frequência (se é que deveria).Se você precisar alterar uma interface, reconsidere sua finalidade e veja se o nome original ainda se aplica a ela.

Se você ainda acha que as interfaces serão alteradas, e as alterações nas interfaces são pequenas (adicionando itens) e você tem controle de toda a base de código, então você deve apenas modificar a interface e corrigir todos os erros de compilação.

Se a sua alteração for uma mudança na forma como a interface será usada, será necessário criar uma interface separada (provavelmente com um nome diferente) para suportar esse padrão de uso alternativo.

Mesmo que você acabe criando ISomething, ISomething2 e ISomething3, os consumidores de suas interfaces terão dificuldade em descobrir quais são as diferenças entre as interfaces.Quando eles devem usar o ISomething2 e quando devem usar o ISomething3?Então você terá que prosseguir com o processo de obsolescência de ISomething e ISomething2.

Outras dicas

Acho que você está exagerando nas interfaces.

Meyer e Martin nos disseram:"Aberto para extensão, mas fechado para modificação!"

e então Cwalina (et al) reiterou:

Das Diretrizes de Design da Estrutura...

Em geral, as classes são o construto preferido para expor abstrações.A principal desvantagem das interfaces é que elas são muito menos flexíveis que as classes quando se trata de permitir a evolução das APIs.Depois de enviar uma interface, o conjunto de seus membros é corrigido para sempre.Quaisquer adições à interface quebrariam os tipos existentes implementando a interface.

Uma classe oferece muito mais flexibilidade.Você pode adicionar membros a classes que já foram enviadas.Desde que o método não seja abstrato (ou seja, desde que você forneça uma implementação padrão do método), quaisquer classes derivadas existentes continuam a funcionar inalteradas.

alt text

Eu concordo com Garo Yeriazarian, mudar a interface é uma decisão séria.Além disso, se quiser promover o uso da nova versão da interface, você deve marcar a versão antiga como obsoleta.No .NET você pode adicionar Atributo obsoleto.

O objetivo de uma interface é definir um padrão abstrato que o tipo deve implementar.

Seria melhor implementar como:

public interface ISomething

public class Something1 : ISomething
public class Something2 : ISomething

Você não ganha nada na forma de reutilização de código ou design escalável ao criar várias versões da mesma interface.

Não sei por que as pessoas rejeitam sua postagem.Eu acho que boas diretrizes de nomenclatura são muito importante.

Se você precisar manter a compatibilidade com o anterior.versão da mesma interface considere usar herança.Se você precisar introduzir uma nova versão da interface, considere a seguinte regra:

Tente adicionar o sufixo significativo à sua interface.Se não for possível criar um nome conciso, considere adicionar o número da versão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top