Pergunta

Será que eles contradizem?

A dissociação é algo grande e muito difícil de alcançar. No entanto, na maioria das aplicações que realmente não precisa, para que eu possa projetar aplicações altamente acoplados e quase não vai mudar nada além de efeitos colaterais óbvios, tais como "você não pode componentes separados", "teste de unidade é a dor na ass" etc.

O que você acha? Você sempre tentar dissociar e lidar com a sobrecarga?

Foi útil?

Solução

Parece-me dissociação e YAGNI são muito virtudes complementares. (Eu só notei a resposta de Rob, e parece que estamos na mesma página aqui.) A questão é o quanto dissociação que deve fazer, e YAGNI é um princípio bom para ajudar a determinar a resposta. (Para aqueles que falam de teste de unidade -. Se você precisa dissociar a fazer o teste de unidade, em seguida, YAGNI obviamente não se aplica)

Eu realmente duvido as pessoas que dizem que "sempre" dissociar. Talvez eles sempre fazem cada vez que penso nisso. Mas eu nunca vi um programa onde as camadas adicionais de abstração não pode ser adicionado em algum lugar, e eu sinceramente dúvida, há um exemplo não-trivial de um programa desse tipo lá fora. Todos desenha um em algum lugar linha.

Da minha experiência, eu deoupled código e depois nunca aproveitado a flexibilidade adicional sobre as vezes que eu tenho código esquerda acoplados e, em seguida, teve que voltar atrás e mudar isso mais tarde. Eu não tenho certeza se isso significa que eu sou bem equilibrada ou igualmente quebrado em ambas as direções.

Outras dicas

YAGNI é uma regra de ouro (não uma religião). A dissociação é mais ou menos uma técnica (também não uma religião). Então eles não estão realmente relacionados, nem se contradizem.

YAGNI é sobre o pragmatismo. Suponha que você não precisa de algo, até que você faça.

Normalmente, assumindo resultados YAGNI no desacoplamento. Se você não aplicar essa faca em tudo, você acaba assumindo que você precisa ter classes que sabem tudo sobre o comportamento dos outros antes de você ter demonstrado que para ser verdade.

"Desacoplar" (ou "vagamente casal") é um verbo, por isso requer trabalho. YAGNI é uma presunção, para o qual você ajustar quando você achar que ele não é mais verdadeiro.

I (quase) sempre dissociar. Toda vez que eu fiz isso eu achei que seria útil, e (quase) toda vez que eu não tive que fazê-lo mais tarde. Eu também achei uma boa maneira de diminuir o número de erros.

Eu diria que não. A dissociação é de cerca de redução dependências desnecessárias no código e apertar-se por meio de acessos, interfaces limpas bem definidas. "Você não vai precisar dele" é um princípio útil que geralmente aconselha contra o excesso de extensibilidade e arquitetura muito ampla de uma solução onde não há caso de uso óbvio e atual.

O resultado prático destes é que você tem um sistema onde é muito mais fácil de refatorar e manter componentes individuais sem inadvertidamente causando um efeito cascata em toda a aplicação, e onde não há desnecessariamente complicado aspectos para o design - é tão simples como é necessário para satisfazer as exigências actuais.

A dissociação para o bem de dissociação pode ser ruim. Construção de componentes testáveis ??é, porém muito importante.

A parte mais difícil da história é saber quando e quanto a dissociação que você precisa.

Se o "teste de unidade é um pé no saco", então eu diria que você do precisa. A maior parte da dissociação tempo pode ser alcançado com praticamente a custo zero, bem, então por que você não quer fazê-lo?

Além disso, um dos meus maiores bugbears quando se trabalha em uma nova base de código é ter que separar o código antes que eu possa começar a escrever testes de unidade quando a introdução de um algum lugar da interface ou uso de injeção de dependência poderia salvar um monte de tempo

Como seu tag diz, é altamente subjetiva. Ela repousa inteiramente sobre a sua própria sabedoria de engenharia para decidir o que você "não está indo necessidade". Você pode precisar de acoplamento em um caso, mas você não vai em outro. Quem é dizer? Você , é claro.

Para uma decisão tão subjetivo, então, não pode haver uma diretriz para prescrever.

Bem, YAGNI é pouco mais que um falso simplistas frase pessoas jogam ao redor. Dissociação, no entanto, é um conceito bastante bem compreendido. YAGNI parece implicar que é algum tipo de psíquico. É apenas a programação pelo clichê, que nunca é uma boa idéia. Para ser honesto, não é um caso a ser feito que YAGNI provavelmente não está relacionada com a dissociação em tudo. Acoplamento é tipicamente "mais rápido" e "quem sabe se você é você vai precisar de uma solução dissociado;! Você não está indo componente X mudança de qualquer maneira"

YAGNI a bagunça :) ... realmente, não precisa ter todo o código misturado ir "mais rápido".

Os testes de unidade realmente ajuda na sensação de quando ele é acoplado (dado a entender bem o que é um teste de unidade vs. outros tipos de testes). Se você, em vez fazê-lo com a mentalidade "você pode componentes não separadas", você pode facilmente chegar a adicionar coisas que você não está indo necessidade:)

Eu diria YAGNI vem em quando você começar a torcer e mudar a lógica ao redor além dos cenários de uso reais das chamadas de implementação atuais para. Vamos dizer que você tem algum código que usa um par de provedores de pagamentos externos que ambos trabalham com redirecionamentos para um site externo. É ok para ter um design que mantém tudo limpo, mas eu não acho que é ok para começar a pensar em provedores que não sabemos se vai ser sempre suportado que têm abundância de diferente maneira de lidar com a integração e as respectivas fluxo de trabalho.

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