Pergunta

No seguimento do meu anterior pergunta Ter uma função com limites genéricos combinados, tais como:

<T extends Foo & Bar> void doStuff(T argument) {
  //do stuff wich should only be done if arguments is both foo and bar
}

Porque este não é refratário a partir de um objeto qualquer, você precisa ter conhecimento de algum objeto que realmente implementa essas interfaces. parece-me que a necessidade de saber o tipo específico do argumento de objeto para passar para doStuff(T a) é uma violação da lei de Demeter.

A função não especifica a necessidade de conhecer a classe real (pode haver muitos diferentes), e eu realmente não quero saber como conhecer esta classe aumenta a dependência em minha base de código.

está usando esses limites um anti padrão? e de que forma deve um melhor evitá-lo?

o cenário caso envolveu uma interface especificando o objeto é persistente e outro objeto especificado ter uma entidade relacionada. a função doStuff(T a) neste caso persistiu entidade relacionada quando foi persistiu. no entanto entidades não persistentes também pode ter uma entidade relacionada, mas não deve ser processado pela função doStuff(T a)

Nenhuma solução correta

Outras dicas

Eu não consideraria combinado limites genéricos um anti-padrão. Pelo menos eu tenho alguns usos para eles no meu código. Por exemplo, o seguinte código de exemplo encontra a maior ocorrência de Number em uma coleção usando compareTo da interface Comparable:

<T extends Number & Comparable<T>> T max(Collection<T> numbers)

parece-me que a necessidade de saber o tipo específico do argumento de objeto para passar para doStuff (T a) é uma violação da lei de Demeter

Eu discordo. Eu não vejo como

T<? extends Foo & Bar> void doStuff(T argument) 

requer mais conhecimento do argumento para passar, em seguida,

T<? extends Foo> void doStuff(T argument) 

Ou até mesmo mais do que apenas

void doStuff(T argument) 

Em todos os casos, você precisa saber algo sobre o argumento e eu não acho que os primeiros casos está exigindo mais conhecimento do que outros, porque tem dois identificadores.

O anti-padrão está lançando.

No entanto, os genéricos Fancy Footwork pode ser confuso para programadores não-avançados. Uso de tais tipos e método deve ser muito mais fácil do que a sua implementação.

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