Ok, eu entendo as convenções normais do uso de verbos com funções e substantivos com classes. E as interfaces? Existe alguma metodologia ao criar nomes de interface que pode não ser tão óbvio?
Só para esclarecer, não estou falando sobre colocar um "I" na frente do nome ou se usar camelCase ou PascalCase. Estou pensando no método de descobrir um nome claro e semântico para uma interface.
EDIT Estou obcecado em como nomear uma interface da maneira mais clara. Acho que ele também precisa ser um substantivo, porque quando penso em nomear classes, penso no objeto do mundo "real" mais próximo ao qual ele pode se relacionar. Suponho que interfaces do mundo real são coisas como teclado, mouse, controle remoto, tela ATM. Esses são todos os substantivos. De qualquer forma, qualquer insight adicional sobre uma boa maneira de formular nomes de interface seria apreciado.
fonte
Respostas:
Eu diria que depende do que a interface define. Em alguns casos, quando a interface é bastante específica e detalhada, acho que um substantivo é o melhor. Exemplos são
IList
,ICollection
.Às vezes, embora uma interface seja mais sobre como adicionar certos recursos gerais a uma classe. Nesse caso, acho que um adjetivo é o melhor. Exemplos são
IDisposable
,IEnumerable
, ...Talvez outra maneira de pensar sobre isso seja quantas "habilidades" sua interface define.
Por exemplo, a
IList<T>
interface define essas habilidades: Adicionar, Limpar, Contém, Inserir, Remover, ... Todas essas são propriedades de uma lista, portanto,IList
é um bom nome.IDisposable
por outro lado, define apenas uma habilidade: Descarte. Portanto, é adequado para qualquer coisa descartável. Daí o nomeIDisposable
.fonte
IEnumerable
), um substantivo "_er" se a sua interface tiver o nome de coisas que o seu objeto faz com outros objetos ( por exemploIEqualityComparer
,) e um substantivo geral se a sua interface tiver o nome de um tipo de coisa cujo comportamento imita (por exemploIList<T>
).I
é redundante.Uma interface descreve o comportamento para que os nomes digam isso. Não tenho certeza sobre uma regra para isso, mas você saberá o nome quando ouvir.
Alguns exemplos:
Eu acho que não é apropriado para nomear interfaces com
I
e chamarSet
comISet
porque, como um desenvolvedor, você não deve estar preocupado se é uma interface ou uma classe. Vejo que essa prática não existe em Java agora.fonte
I
é redundante, independentemente. Então por que não prefixar classes abstratas comA
, classes regulares comC
etc?Como uma interface é realmente apenas uma expressão do tipo "o quê", mas não o "como", eu os nomearia da mesma maneira que você nomeia classes, pelo menos de uma parte da perspectiva da fala. A única coisa que posso acrescentar é que eles costumam ser mais gerais do que os implementadores específicos (por exemplo, a interface "Customer" pode ter implementadores "ProspectiveCustomer" e "PayingCustomer").
fonte
Uma interface é usada como uma classe. Portanto, também deve ser nomeado com um substantivo quando você nomear classes com substantivos. Prefira substantivos abstratos, por exemplo "Veículo" quando as classes forem "Carro" e "Caminhão".
fonte
Rápida Resposta: Interface é mais sobre adição de um SET de habilidades, características, limites comuns ou de interconexão entre entidades, classes, modelos, conceitos, etc ..
O problema de adicionar um comportamento comum a classes e entidades e, em seguida, um bom nome significativo surgirá para identificar o conjunto de recursos reais.
Nomeação de interface como:
IStateMachineBuilder, IUserContextProviderBuilder, IEntityBuilderBuilder, IActiveAware, etc.
provavelmente explique o conceito.fonte
IStateMachineBuilder
(substantivo),IBuildStateMachine
(em homenagem a uma ação),ICanBuildStateMachine
(nome de um recurso), etc.Depende, se a interface contiver apenas métodos, será bom nomeá-la usando verbos como "Actions", como se representasse uma classe genérica que contenha campos estáticos e finais, então podemos usar um Substantivo genérico como "Vehicle"
fonte