Uma pergunta incômoda e aberta, mas é um problema contra o qual sempre me deparo:
O software fácil de manter e trabalhar é um software bem projetado. Tentar tornar um design intuitivo significa nomear seus componentes de forma que o próximo desenvolvedor possa deduzir a função do componente. É por isso que não nomeamos nossas classes "Tipo1", "Tipo2" etc.
Quando você está modelando um conceito do mundo real (por exemplo, cliente), geralmente é tão simples quanto nomear seu tipo após o conceito do mundo real que está sendo modelado. Mas quando você está criando coisas abstratas, mais orientadas ao sistema, é muito fácil ficar sem nomes fáceis de ler e de digerir.
Fica pior (para mim) ao tentar nomear famílias de tipos, com um tipo de base ou interface que descreve o que os componentes precisam fazer, mas não como eles funcionam. Isso naturalmente leva cada tipo derivado a tentar descrever o sabor da implementação (por exemplo, IDataConnection
e SqlConnection
no .NET Framework), mas como você expressa algo complicado como "funciona por reflexão e procura por um conjunto específico de atributos"?
Então, quando você finalmente escolhe um nome para o tipo que acha que descreve o que está tentando fazer, seu colega pergunta "WTF isso DomainSecurityMetadataProvider
realmente faz? "
Existem boas técnicas para escolher um nome bem-intencionado para um componente ou como construir uma família de componentes sem obter nomes confusos?
Existem testes simples que eu posso aplicar a um nome para ter uma idéia melhor se o nome é "bom" e deve ser mais intuitivo para os outros?