A comunidade C # usou de maneira tão onipresente o prefixo "I" para denotar uma interface que até os programadores mais inexperientes sabem usá-lo.
Por que é que não prefixamos enumerações, classes abstratas ou estruturas (possivelmente com "E", "A" e "S" respectivamente)?
Por exemplo, se marcássemos todas as classes abstratas com um "A", forneceria informações valiosas sobre esse tipo que, embora possa ser inferido, não é imediatamente óbvio.
Observe que não estou advogando por essa mudança; estou apenas tentando entender por que não fazemos as coisas dessa maneira.
Este tópico responde por que usamos o prefixo "I", mas não responde por que não usamos outros prefixos.
c#
.net
coding-standards
source-code
Stephen
fonte
fonte
Respostas:
O objetivo da convenção de nomenclatura para interfaces é fornecer uma decisão rápida e sem cérebro sobre o que chamar de interface que sua classe implementa. Se você tem uma
Frobnicator
, mas precisa declarar uma interface para desacoplar ou qualquer outra razão, a decisão de chamá-laIFrobnicator
não requer pensamento consciente, e isso é bom.O mesmo problema não se aplica a outras construções que você nomeia. Enums e estruturas são úteis, mas não é necessário encontrar um segundo nome , curto, transparente e obviamente relacionado, além do próprio nome. Portanto, não há pressão para colocar um 'E' no nome de uma enumeração ou estrutura.
(As classes abstratas são um pouco semelhantes às interfaces, já que você precisa fornecer uma segunda classe concreta para fazer qualquer coisa, para que elas possam ter adquirido uma convenção de começar com 'A', mas por qualquer motivo, não o fizeram. Estou autorizado a especular, acho que 'eu' sendo uma carta particularmente estreita pode ter algo a ver com isso.)
fonte
AnimalBase
e sabores distintos sãoAnimalGiraffe
,AnimalLion
etcList
, desde o nome técnicoArrayList
eLinkedList
são os nomes das implementações. (C #, creio eu, temIList
como interface, eList
como a lista de matriz)Point p = myPoints[3]; p.X += 3;
isso afetariamyPoints[3].X
. Retrospectivamente, eu teria preferido que o C # fosse usadovar->field
para acesso ao campo de classe e ao acesso ao campovar.field
struct, mas obviamente não. Ainda assim, parece que alguns meios de distingui-los seriam úteis.Eu acho que não é muito usado porque:
A partir desse último item e alguma interpretação, você pode concluir. Sistemas húngaro (tipo de prefixo) é ruim e não deve ser usado. O Apps Hungarian (tipo de prefixo) possui.
Retirando isso da sua pergunta, acho que a notação proposta é uma forma de aplicativos húngaro e se você acha que o valor agregado aumenta os custos e o implementa de forma consistente em sua base de código, tudo bem. Mas como você deve considerá-lo por projeto, não deve ser uma regra geral.
Eu acho que as pessoas notaram que ele se importava com interfaces com mais frequência e é por isso que se tornou uma regra geral para interfaces.
fonte
Apenas um pensamento (espero que seja aplicável):
Há uma tendência óbvia para 'codificar para interfaces' em vez de classes concretas. "Hoje em dia", parece quase mais benéfico ter uma convenção de nomenclatura para as classes, como iniciá-las com um 'C', em vez de ter a letra 'I' para a interface.
Acabei de finalizar um projeto Java no qual todas as interfaces eram na verdade chamadas Model. Sim, a convenção de nome de interface era terminar o nome com 'Model' ... então, algum tipo de 'DataTransferObject / DTO' implementa a interface como :
enquanto que em c #
Reconfigurando meu cérebro para manter essa dor direta, mas posso ver como isso pode ajudar a pensar nos termos de programação da interface.
fonte