Sobre I na interface, achei uma ótima ideia por questões que voce sabe quando será uma Interface por causa da visibilidade, ao contrario do Java que voce precisa abrir a documentação do método/atributo e verificar se é uma interface, etc.
Não faz muito sentido né? Se você vai usar uma classe ou interface o mínimo que você precisa saber é o que ela oferece, normalmente lendo a documentação. Começar com I ou não, nesse caso não ajuda em nada.
Por exemplo, o que mudaria para você saber que IDbConnection
é uma interface? Se você não conhece-la, não ajudar muito de qualquer forma.
Agora imagina uma classe chamada DbConnection
, não existem variações no seu sistema então DbConnection
é a única classe que implementa o que você precisa. Se por ventura você precisar de variações, você pode converter a classe para uma interface sem mudar seu nome, e gerar classes derivadas como MySQLDbConnection
e PostgreSQLDbConnection
que implementem a interface DbConnection
e tudo continuará funcionando.
Usar o I para interface me lembra a notação húngara que era usada muitos anos atrás, onde variáveis de texto começam como str, txt ou s, por exemplo:
- strNomeCliente
- txtEndereco
- sEmail
- intIdade
- iDia
- dtNascimento
- ... e por aí vai
Se você precisa do I para diferenciar uma interface, então precisaria do A para uma classe abstrata (ADbConnection
) certo? E do S para uma struct (SPessoa
) não é?
Percebe que o I é só um ruído de um passado onde as IDEs não ofereciam tantas informações e a documentação não era tão acessível?