Existem cheiros de arquitetura?

37

Existem muitos recursos na web referentes e listando odores de código. No entanto, nunca vi informações sobre cheiros arquitetônicos . Isso está definido em algum lugar e existe uma lista disponível? Alguma pesquisa formal foi feita sobre defeitos de arquitetura e seu impacto na velocidade do projeto, defeitos e similares?

Editar: eu realmente não estava procurando uma lista nas respostas, mas a documentação (na Web ou em um livro) sobre arquitetura cheira.

Cruz
fonte
4
Somente quando o arquiteto tem maus hábitos de higiene pessoal ...
FrustratedWithFormsDesigner
Eu realmente não queria que vocês listassem os cheiros aqui. Talvez link para uma lista?
C. Ross
Ross Desculpe, eu não percebi isso. Acabei de adicionar algumas experiências.
Amir Rezaei
@Amir Rezaei o seu é o melhor do lote, pelo menos você consolidou sua lista em um post.
C. Ross

Respostas:

33
  • Arquitetura multicamada Quando você tem Camadas em Camadas em Camadas em Camadas ... você vê meu ponto aqui, no seu aplicativo. Eu chamo isso de Over Layered Architecture
  • Abstração excessiva de maneira que você se perca no código.
  • Arquitetura futurista Isso acontece quando a solução é muito futurista. Na realidade, ninguém pode prever novos requisitos. Portanto, a maior parte da implementação futurista é apenas perda de tempo e recursos.
  • Arquitetura entusiasta por tecnologia O arquiteto gostou da nova tecnologia e colocou em produção. Sem saber se foi provado antes.
  • Sobre-matar a arquitetura Um problema simples foi resolvido pelo fator exponencial das habilidades e tecnologia da arquitetura.
  • Arquitetura em nuvem Eu chamo de arquitetura em nuvem, já que a arquitetura não tem conexão com a realidade. São apenas alguns bons diagramas do Visio.

A total falta do oposto também é verdadeira.

Aqui está o link dos dez principais erros de arquitetura de software .

Amir Rezaei
fonte
11
Eu concordo com esta, eu vi aplicação em camadas absurdo (até 9 camadas)
7
Arquitetura baklava?
Andrew Arnold
15
ah, o parente próximo do código do espaguete, eu gosto de chamar isso de 'código da lasanha'
GSto 18/02/11
6
Ooh @GSto - Código de espaguete na arquitetura Lasanha. O conjunto completo poderia ser chamado de "pequena Itália".
glenatron
2
Em alguns lugares application_layers == (developers_assigned - 1) porque alguém acaba sendo o PM.
sal
20

Tudo é configurável . Quando um arquiteto diz que seu sistema é à prova de alterações ou altamente personalizável por causa da ampla configuração, esse é um cheiro de arquitetura.

O problema é que você pode realmente fornecer apenas mecanismos de configuração para o que você acha que agora precisará ser configurado, mas, quando seu aplicativo estiver em estado selvagem, não será suficiente. Em seguida, os mecanismos de configuração se expandem e se expandem e, eventualmente, você obtém o Efeito da Plataforma Interna.

E então você está no inferno do software.

Adam Crossland
fonte
Interessante, porém, que o Efeito da Plataforma Interna seja infernal e, no entanto, muitas pessoas olhem para o desenvolvimento orientado por DSL como uma Próxima Grande Coisa, que é um pouco de plataforma interna por design, eu acho.
glenatron
@glenatron: Talvez seja esse o ponto? Por que não apenas jogar a toalha e assumir que isso vai acontecer. Em seguida, você pode desenvolver com sua DSL e modificar a implementação para lidar com mais configurações.
Jeremy Heiler
Eu diria que DSL é como DSL. Essas são boas e más maneiras de implementar. Quando penso em como isso pode ser feito corretamente, penso nas muitas DSLs que compõem o Ruby on Rails. Eles não implementam sua própria linguagem - são apenas construções dentro de um programa Ruby, mas abstraem de maneira inteligente e útil muitos dos detalhes do que são uma linguagem. Quando o IPE realmente começa a feder aos céus é quando se desloca de Domain-Specific Language para Lanuage Cada vez mais generalizada de que começa a parecer muito com a linguagem que ele é implementado em.
Adam Crossland
Eu estava lendo sobre os DSLs recentemente, o Jetbrains tem seu MPS que parece interessante, mas ainda não consigo conceber usá-lo. Eles alegam usá-lo em alguns de seus produtos, para que eu possa saber quais e como.
18711 Ian
Eu votaria isso 100.000.000 vezes, se pudesse. Se você já usou a ferramenta de gerenciamento de projetos chamada Clarity, entenderia por que essa é uma opção horrível de arquitetura!
HLGEM
9

Um banco de dados criado por um ORM! Ou um back-end de banco de dados não relacional que deve ser relacional. Ou um banco de dados no qual você projeta usar modos de exibição que chamam modos de exibição, não apenas são muito lentos (os bancos de dados devem ser projetados para desempenho desde o início até mais tarde), mas quando você precisa fazer uma alteração, eles são horríveis de rastrear (A abstração, como o @AmirResaei disse, facilita a perda do código quando você precisa corrigir algo que está na parte inferior de todas essas camadas.)

HLGEM
fonte
Isso está morto. Infelizmente, está se tornando um problema maior à medida que o hardware fica mais rápido. Ele funciona rápido em 10 registros, por que não funcionaria com 100.000.000?
Jeff Davis
4
para mim, ORM é cheiro de arquitetura.
Christopher Mahan
3

Os odores de código e os de arquitetura são a mesma coisa. O código começa a "cheirar" por causa da arquitetura subótima.

No livro seminal de Martin Fowler sobre o tópico Refatoração , ele apresenta uma série de Code Smells e identifica uma maneira de refatorá-los do sistema. A refatoração de padrões de Joshua Kerievsky enfatiza ainda mais essa idéia, fornecendo padrões arquiteturais específicos para corrigir vários odores de código (e como refatorá-los passo a passo).

A maioria das refatorações é feita para aliviar o código abaixo do ideal por meio de arquitetura aprimorada. Alguém poderia argumentar que o único "cheiro arquitetônico" nascido naturalmente (que não seja Big Ball of Mud) seria a arquitetura BDUF (Big Design Up Front). Onde você tenta acomodar tudo o que precisa antes que a primeira linha de código seja escrita. Um projeto de software ágil, em que o design é feito conforme a necessidade (mesmo que eu diga que o código é tratado como design ), terá sua arquitetura crescer organicamente.

Michael Brown
fonte
11
Ponto interessante, você pode dar um exemplo?
Travis Christian
Codificação inteligente é o cheiro do código.
Christopher Mahan
Uma resposta que faz uma afirmação sem fatos comprovativos. Responda cheiro?
quer
@EvanPlaice Minhas desculpas. Espero que minha edição forneça mais informações sobre como cheguei à minha resposta.
Michael Brown
@ MikeBrown +1 Eu estava sendo uma faceta, mas uma melhoria agradável.
Evan Solha
2

(Muita) Acoplamento - de qualquer forma - é o que faz as arquiteturas cheirem. Quanto mais ele é acoplado, mais ele cheira.

Dito isto: nenhum acoplamento geralmente cheira a problemas de desempenho.

Klaim
fonte
11
Eu tenho que discordar disso. Se você está falando de aplicativos de negócios, o acoplamento a um banco de dados com pouca probabilidade de alteração é inteligente, não estúpido. Você pode usar o recurso mais desempenho específico do banco de dados.
HLGEM
+1 mas YMMV. Use com cuidado.
Michael K
11
Por isso, acrescentei "nenhum acoplamento costuma cheirar a problemas de desempenho". Concordo que você precisa usar o acoplamento para melhorar o desempenho. É quando há muito acoplamento em todos os lugares (entre os diferentes módulos / classes / qualquer que seja sua aplicação) que há um problema de arquitetura.
18711 Klaim
2

Aqui está um cheiro concreto de arquitetura / design que encontro o tempo todo: análise e geração de relatórios diretamente de um banco de dados transacional.

Certamente isso é bom em algumas situações (ou seja, relatórios leves), mas em muitos casos os requisitos de processamento de transações e relatórios estão em conflito. No entanto, como é simples / barato, os relatórios são executados diretamente do banco de dados transacional. Isso causa todos os tipos de dores de cabeça nos dois lados da equação.

Isso geralmente é visto nos aplicativos Enterprise LOB, btw. Entendo que muitas pequenas e médias empresas simplesmente não têm os recursos ou o know-how para criar armazéns e datamarts (esqueça os cubos ou configurações de redução de mapa), mas muitas organizações maiores com as quais trabalhei têm os mesmos problemas.

Ao projetar um sistema, o arquiteto realmente deve estar ciente de que os relatórios - especialmente os relatórios de análise - e os requisitos transacionais são melhor tratados como problemas separados e não apenas agrupados no nível do banco de dados.

Curtis Batt
fonte
0

Não tenho certeza se isso se encaixa corretamente no nível da arquitetura, mas se vejo várias classes / módulos de gerente no que é suposto ser um design OO, isso é uma garantia de que a única pessoa que entenderá a arquitetura / design é o próprio arquiteto / designer sem muita explicação / aprendizado por outros.

Dunk
fonte
0

Existem muitos odores de arquitetura documentados pela comunidade. Um conjunto comum é o seguinte.

  • Dependência cíclica: esse cheiro surge quando dois ou mais componentes da arquitetura dependem um do outro direta ou indiretamente.
  • Dependência instável: esse cheiro surge quando um componente depende de outros componentes que são menos estáveis ​​que ele.
  • Componente de Deus: Esse cheiro ocorre quando um componente é excessivamente grande, tanto nos termos do LOC quanto no número de classes.
  • Concentração de recursos: esse cheiro ocorre quando um componente percebe mais de uma preocupação / recurso de arquitetura.
  • Funcionalidade dispersa: esse cheiro surge quando vários componentes são responsáveis ​​pela realização da mesma preocupação de alto nível.
  • Estrutura densa: esse cheiro surge quando os componentes têm dependências excessivas e densas sem nenhuma estrutura específica.

Recentemente, preparei uma taxonomia de cheiros . Atualmente, ele documenta 38 odores de arquitetura e mais de 260 odores de código total.

Tushar
fonte