Pergunta

Eu apenas encontrei-me criar uma classe chamada "InstructionBuilderFactoryMapFactory". Que é 4 "sufixos padrão" de um classe. Ela imediatamente me fez lembrar o seguinte:

http://www.jroller.com/landers/entry/the_design_pattern_facade_pattern

Este é um cheiro design? Devo impor um limite para esse número?

Eu sei que alguns programadores têm regras semelhantes para outras coisas (por exemplo, não mais do que os níveis de N de engano ponteiro em C).

Todas as classes parece necessário me. Eu tenho um mapa (fixo) de cordas para as fábricas - algo que fazemos o tempo todo. A lista está ficando longa e eu quero movê-lo para fora do construtor da classe que usa os construtores (que são criados pelas fábricas que são obtidas a partir do mapa ...) E como de costume eu estou evitando Singletons.

Foi útil?

Solução

Eu vejo isso como um cheiro design - ele vai fazer-me pensar se todos os níveis de abstração estão puxando peso suficiente

.

Eu não posso ver porque você quis nomear uma classe 'InstructionBuilderFactoryMapFactory'? Existem outros tipos de fábricas - algo que não criar um InstructionBuilderFactoryMap? Ou existem outros tipos de InstructionBuildersFactories que precisa ser mapeado?

Estas são as perguntas que você deve estar pensando quando você iniciar a criação de classes como estes. É possível apenas agregar todas essas diferentes fábricas fábrica para apenas um único e, em seguida, fornecer métodos distintos para a criação de fábricas. Também é possível apenas colocar aqueles fábrica de fábrica em um pacote diferente e dar-lhes um nome mais sucinto. Pense em maneiras alternativas de se fazer isso.

Outras dicas

Uma boa dica é: Sua classe API pública (e isso inclui-lo do nome) deve revelar a intenção, não de implementação. I (como um cliente) não se importam se você implementou o padrão do construtor ou o padrão de fábrica.

Não só o nome da classe parece ruim, mas também não diz nada sobre o que ele faz. Seu nome é baseado em sua implementação e estrutura interna.

Eu raramente usar um nome padrão em uma classe, com exceção de (às vezes) Fábricas.

Editar:

Encontrou um interessante sobre a nomeação no Coding Horror, por favor verificá-la !

Muitos dos padrões em um nome de classe é definitivamente um cheiro, mas um cheiro não é um indicador definitivo. É um sinal para "parar por um minuto e repensar a concepção". Muitas vezes quando você sentar e pensar uma solução mais clara se torna aparente. Às vezes, devido às limitações na mão (/ hora técnico / poder do homem / etc) significa que o cheiro deve ser ignorado por agora.

Quanto ao exemplo específico, eu não acho que sugestões da galeria de amendoim são uma boa idéia, sem mais contexto.

Eu estive pensando a mesma coisa. No meu caso, a abundância de fábricas é causada por "construção de capacidade de teste". Por exemplo, eu tenho um construtor como este:

ParserBuilderFactoryImpl(ParserFactory psF) {
...
}

Aqui eu tenho um analisador - o máximo classe que eu preciso. O analisador é construído chamando métodos em um construtor. Os construtores (novo para cada analisador que precisa ser construído) são obtidos a partir da fábrica construtor.

Agora, o que o h..l é ParserFactory? Ah, estou feliz que você pediu! A fim de testar a implementação construtor analisador, eu preciso chamar seu método e, em seguida, ver que tipo de analisador foi criada. A única maneira de fazê-lo w / o violar a encapsulação da classe parser particular, que o construtor está criando é colocar um certo ponto de intercepção antes do analisador é criado, para ver o que se passa em seu construtor. Daí ParserFactory. É apenas uma maneira de me observar em um teste de unidade que é passado para o construtor de um analisador.

Eu não sou completamente certo como resolver isso, mas tenho a sensação de que seria melhor passar em torno de classes em vez de fábricas e Java faria melhor se pudesse ter métodos de classe adequadas ao invés de membros estáticos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top