Acabei de encontrar um "problema interessante", sobre o qual gostaria de sua opinião:
Estou desenvolvendo um sistema e, por muitas razões (significando: abstração, independência tecnológica etc.), criamos nossos próprios tipos para a troca de informações.
Por exemplo: se existe um método chamado SendEmail e é invocado pela lógica de negócios, ele possui um parâmetro do tipo OurCompany.EMailMessage, que é um objeto totalmente independente da tecnologia e contém apenas "dados relevantes para os negócios" (por exemplo, nenhuma informação sobre a codificação principal).
Dentro da função SendEmail, obtemos essas informações do nosso objeto EMailMEssage e criamos um objeto MailMessage (este é específico da tecnologia) para que possa ser enviado pela rede.
Como você já pode perceber, nossa classe tem um nome muito semelhante à classe de idioma "nativo". O problema é: isso é exatamente o que são, mensagens de email, por isso é difícil encontrar outro nome significativo para eles.
Você tem esse problema com frequência? Como você administra isso?
Edit: @mgkrebbs acabou de comentar sobre o uso de nomes totalmente qualificados. Esta é a nossa abordagem atual, mas um pouco detalhada demais, IMHO. Eu gostaria de algo mais limpo, se possível.
fonte
Respostas:
Esse é um problema sobre o espaço para nome que você usará para o seu projeto.
Basicamente, um espaço para nome é a coleção das palavras-chave fornecidas por todas as suas classes e / ou todas as classes que você deseja usar em seu projeto (incluindo as classes padrão normalmente fornecidas com o idioma / compilador / IDE).
Como um espaço para nome é uma coleção, algumas regras são basicamente aplicadas para impedir a confusão de termos sem nenhum comportamento relacionado, e algumas linguagens como o C # também permitem definir seu próprio espaço para nome normalmente e também usá-lo em outras classes.
Não confunda o espaço para nome com a palavra-chave básica do idioma, eles são uma coleção de palavras-chave, mas com uma grande diferença entre os dois: você pode modificar um espaço para nome, mas geralmente não pode modificar as palavras-chave básicas de um idioma. A soma entre o espaço para nome que você usou no seu projeto e as palavras-chave básicas do idioma que você usa fornece a quantidade total de palavras-chave.
O tópico é muito discutido na rede. Posso sugerir uma pesquisa básica com os termos "namespace [seu idioma]" ou algo assim. Não estou respondendo diretamente à sua pergunta simplesmente porque você pode ter uma abordagem diferente para diferentes idiomas.
fonte
Bem, minha antiga equipe de desenvolvimento usa para acrescentar o acrônimo do aplicativo em cada classe personalizada. Tivemos, por exemplo, a classe ABCEmail .
Eu acho que é mais direto do que depender do espaço para nome, mas também pode ser uma solução complementar para o uso do espaço para nome.
Por último, mas não menos importante, como você está criando um novo objeto, significa que o objeto nativo não atende às suas necessidades, portanto o nome do seu arquivo de email pode ser CustomizedEmail , AdvancedEmail ... etc.
fonte
OAEmail
seria melhor queOurApplication.Email
?OAEMail
tem impacto em todas as partes do software, enquanto a notação de espaço para nome afeta apenas onde a conversão ocorre e as duas classes são usadas no mesmo arquivo de origem.Que linguagem você está usando? A resposta é específica do idioma. Em geral, a resposta é 'use namespaces'. Eu quase nunca manipularia o nome do tipo para evitar um conflito com algum espaço para nome externo.
Em um único aplicativo Java, é bastante comum ter o mesmo nome de classe (por exemplo, "Data") definido em meia dúzia de namespaces. Se uma classe precisar usar duas classes Date separadas, uma das classes Date deverá ser totalmente qualificada em todos os lugares em que aparecer, pois o Java não suporta aliases de tipo. Em C ++, a vida é mais fácil; você pode simplesmente renomear um deles com um typedef.
fonte
Realmente depende do idioma que você usa. Em c ++ e java, esse problema é resolvido usando espaços para nome. Eu estou usando c ++, e acontece que eu tenho classes diferentes com o mesmo nome. Não é um problema, pois eles estão em diferentes namespaces.
Em outros idiomas, não há como evitar nomes diferentes.
fonte
xyz123
e ainda funciona da mesma maneira. Eu não vejo outra maneira, em seguida, ficar detalhada (você disse nos comentários que está tentando evitá-la).Sua pergunta é muito boa. Que tal se você prefixar seu método com um prefixo como U (ou u) ou cls (abreviação de classe)? Por exemplo:
clsEMailMEssage ou uEMailMEssage
Isso não requer muita digitação e você pode dizer imediatamente que o tipo é 'seu'.
Editar - em resposta aos 2 primeiros comentários:
Gostaria de chamar a atenção do leitor para o fato de que: nem todas as notações húngaras são iguais. Devemos distinguir entre sistema húngaro e aplicativos húngaro , presumo que a sugestão acima segue o tipo de aplicativos húngaro, o que não é prejudicial.
O dano associado à notação húngara do sistema, como nomear um ID e um intID, não está presente na sugestão acima.
Para saber mais, dê uma olhada em: Fazendo o código errado parecer errado - Joel On Software
fonte