Y a-t-il des odeurs d'architecture?

37

Il existe des tonnes de ressources sur le Web qui font référence aux odeurs de code. Cependant, je n'ai jamais vu d'informations sur les odeurs architecturales . Est-ce défini quelque part et y a-t-il une liste disponible? Des recherches officielles ont-elles été menées sur les défauts d'architecture et leur impact sur la vitesse du projet, les défauts, etc.?

Edit: Je ne cherchais pas vraiment une liste dans les réponses, mais une documentation (sur le Web ou dans un livre) sur l’architecture sent.

Traverser
la source
4
Ce n'est que lorsque l'architecte a de mauvaises habitudes d'hygiène personnelle ...
FrustratedWithFormsDesigner
Je ne voulais vraiment pas que vous énumériez ici les odeurs. Peut-être un lien vers une liste?
C. Ross
Ross Désolé de ne pas m'en rendre compte. Je viens d'ajouter quelques expériences.
Amir Rezaei
@Amir Rezaei est le meilleur du lot, au moins vous avez consolidé votre liste en un seul poste.
C. Ross

Réponses:

33
  • Architecture à plusieurs niveaux Lorsque vous avez des calques sur des calques, vous voyez ce que je veux dire ici, dans votre application. Je l'appelle l' architecture par couches
  • Sur l'abstraction de telle manière que vous vous perdez dans le code.
  • Architecture futuriste Cela se produit lorsque la solution est trop futuriste. En réalité, personne ne peut prédire de nouvelles exigences. Par conséquent, la majeure partie de la mise en œuvre futuriste n’est qu’une perte de temps et de ressources.
  • Technologie Architecture enthousiaste L'architecte a aimé la nouvelle technologie et l'a mis en production. Sans savoir si c'était prouvé avant.
  • Over Kill Architecture Un problème simple a été résolu par un facteur exponentiel de compétences en architecture et en technologie.
  • Architecture en nuage J'appelle architecture en nuage car l'architecture n'a aucun lien avec le réel. Ce ne sont que quelques beaux diagrammes Visio.

L'absence totale du contraire est également vraie.

Voici le lien des dix principales erreurs d’architecture logicielle .

Amir Rezaei
la source
1
Je suis d'accord sur celui-ci, j'ai vu une application superposée superposée (jusqu'à 9 couches)
7
Architecture de Baklava?
Andrew Arnold
15
ah, le parent proche du code spaghetti, j'aime appeler ce code Lasagne
GSto le
6
Ooh @GSto - Code spaghetti dans l'architecture des lasagnes. L'ensemble complet pourrait s'appeler "petite Italie".
Glenatron
2
Dans certains endroits, application_layers == (developers_assigned - 1) car quelqu'un finit par être le PM.
sal
20

Tout est configurable . Lorsqu'un architecte vous dit que son système est protégé contre les modifications ou hautement personnalisable en raison d'une configurabilité étendue, c'est une odeur d'architecture.

Le problème est que vous ne pouvez réellement fournir que des mécanismes de configuration pour ce que vous pensez devoir être configuré en ce moment, mais une fois que votre application est dans la nature, elle ne sera plus suffisante. Ensuite, les mécanismes de configuration se développent et se développent et vous obtenez finalement l’effet de plate-forme interne.

Et puis vous êtes dans l'enfer du logiciel.

Adam Crossland
la source
Ce qui est intéressant, c’est que l’effet Inner Platform est infernal, et pourtant, beaucoup de gens envisagent le développement orienté DSL comme une nouvelle grande chose, qui est légèrement de conception interne, je pense.
Glenatron
@ Glenatron: Peut-être que c'est le point? Pourquoi ne pas simplement jeter l'éponge et supposer que cela va arriver. Ensuite, vous pouvez développer avec votre DSL et modifier l’implémentation pour gérer davantage de configuration.
Jeremy Heiler
Je dirais que DSL est comme DSL. Ce sont de bons et de mauvais moyens à mettre en œuvre. Quand je pense à la façon dont cela peut être fait correctement, je pense aux nombreux DSL qui composent Ruby on Rails. Ils n'implémentent pas leur propre langage - ce ne sont que des constructions au sein d'un programme Ruby, mais ils résument habilement et utilement de nombreux détails de ce à quoi ils sont destinés. Là où l'IPE commence vraiment à sentir mauvais, c'est quand on passe d'un langage propre à un domaine à un langage de plus en plus généralisé qui commence à ressembler beaucoup au langage dans lequel il est implémenté.
Adam Crossland
Je lisais récemment au sujet de DSL, Jetbrains a son MPS qui a l'air intéressant, mais je ne peux pas encore l'utiliser. Ils prétendent l’utiliser sur certains de leurs produits, je peux donc me renseigner pour savoir lesquels et comment.
Ian
Je voterais ce 100 000 000 fois si je le pouvais. Si vous avez déjà utilisé l'outil de gestion de projet appelé Clarity, vous comprendrez pourquoi il s'agit d'un choix d'architecture horrible!
HLGEM
9

Une base de données conçue par un ORM! Ou une base de données non relationnelle qui devrait être relationnelle. Ou une base de données conçue pour utiliser des vues appelant des vues appelant des vues, non seulement elles sont trop lentes (les bases de données ne doivent pas être conçues pour être performantes dès le début), mais lorsqu'une modification est nécessaire, elles sont horribles à suivre. (Surabstraction, comme @AmirResaei l'a dit, il est facile de se perdre dans le code lorsque vous devez réparer quelque chose qui se trouve au bas de toutes ces couches.)

HLGEM
la source
C'est mort. Malheureusement, le problème devient de plus en plus grave à mesure que le matériel s'accélère. Ça marche vite sur 10 disques, pourquoi ça ne marcherait pas avec 100 000 000?
Jeff Davis
4
pour moi, ORM, c'est l'architecture odorante.
Christopher Mahan
3

Les odeurs de code et les odeurs architecturales ne font qu'un. Le code commence à "sentir" à cause d'une architecture non optimale.

Dans son livre phare sur le sujet, Refactoring , Martin Fowler présente une série de codes Smells et identifie un moyen de les refactoriser hors de votre système. Le Refactoring to Patterns de Joshua Kerievsky renforce encore cette idée en donnant des motifs architecturaux spécifiques pour corriger diverses odeurs de code (et comment les reformuler étape par étape).

La plupart des refactorisations sont effectuées pour alléger le code sous-optimal via une architecture améliorée. On pourrait argumenter que la seule "odeur architecturale" née naturellement (autre que Big Ball of Mud) serait l'architecture BDUF (Big Design Up Front). Où vous essayez de gérer tout ce dont vous avez besoin avant que la première ligne de code ne soit écrite. Un projet logiciel agile où la conception est faite en fonction des besoins (même si je considère que le code est traité comme une conception ), son architecture se développera de manière organique.

Michael Brown
la source
1
Point intéressant, pouvez-vous donner un exemple?
Travis Christian
Le codage intelligent est une odeur de code.
Christopher Mahan
Une réponse qui fait une déclaration sans faits à l'appui. Répondre odeur?
Evan Plaice
@EvanPlaice Mes excuses. Espérons que mon édition fournisse un peu plus de perspicacité sur la façon dont je suis arrivé à ma réponse.
Michael Brown
@ MikeBrown +1 J'étais facétieux mais belle amélioration.
Evan Plaice
2

(Beaucoup de) Coupler - sous quelque forme que ce soit - est ce qui fait sentir les architectures. Plus c'est couplé, plus ça sent.

Cela dit: pas de couplage du tout sent souvent des problèmes de performances.

Klaim
la source
1
je ne suis pas d'accord avec ça. Si vous parlez d'applications métier, le couplage à une base de données très peu susceptible de changer est intelligent, mais pas stupide. Vous pouvez utiliser la fonctionnalité plus performante spécifique à la base de données.
HLGEM
+1 mais YMMV. Utiliser avec précaution.
Michael K
1
C'est pourquoi j'ai ajouté "aucun couplage ne sent souvent des problèmes de performances". Je conviens que vous devez utiliser le couplage pour améliorer les performances. C'est quand il y a beaucoup de couplage partout (entre les différents modules / classes / quelle que soit votre application) qu'il y a un problème d'architecture.
Klaim
2

Voici une odeur concrète d'architecture / conception que je rencontre tout le temps: l'analyse et la création de rapports directement à partir d'une base de données transactionnelle.

Cela convient certainement dans certaines situations (par exemple, des rapports légers), mais dans de nombreux cas, les exigences en matière de rapport et de traitement transactionnel sont en conflit. Cependant, comme il s’agit d’une solution simple et peu coûteuse, les rapports sont directement exécutés à partir de la base de données transactionnelle. Cela provoque toutes sortes de maux de tête des deux côtés de l'équation.

Cela se voit généralement dans les applications Enterprise LOB, entre autres. Je comprends que beaucoup de PME ne disposent pas des ressources ni du savoir-faire pour créer des entrepôts et des datamarts (oubliez les cubes ou les configurations avec réduction de carte), mais de nombreuses grandes organisations avec lesquelles j'ai travaillé ont les mêmes problèmes.

Lors de la conception d'un système, l'architecte doit être conscient du fait que la création de rapports - en particulier les rapports d'analyse - et les exigences transactionnelles sont mieux traitées comme des problèmes distincts et non pas simplement regroupés au niveau de la base de données.

Curtis Batt
la source
0

Je ne sais pas si cela correspond légitimement au niveau de l'architecture, mais si je vois un tas de classes / modules de gestionnaires dans ce qui est supposé être une conception orientée objet, alors c'est la garantie que la seule personne qui comprendra l'architecture / la conception est l’architecte / designer lui-même sans beaucoup d’explications / d’apprentissage par les autres.

Tremper
la source
0

Il y a beaucoup d'arômes d'architecture documentés par la communauté. Un ensemble courant est le suivant.

  • Dépendance cyclique: cette odeur se produit lorsque deux composants d'architecture ou plus dépendent l'un de l'autre directement ou indirectement.
  • Dépendance instable: cette odeur survient lorsqu'un composant dépend d'autres composants moins stables que lui-même.
  • Composant divin: Cette odeur apparaît lorsqu'un composant est excessivement volumineux, que ce soit en termes de LOC ou de nombre de classes.
  • Concentration des entités: cette odeur se produit lorsqu'un composant réalise plus d'un problème / élément architectural.
  • Fonctionnalité dispersée: cette odeur se produit lorsque plusieurs composants sont responsables de la réalisation du même problème de haut niveau.
  • Structure dense: Cette odeur survient lorsque les composants ont des dépendances excessives et denses sans structure particulière.

J'ai récemment préparé une taxonomie des odeurs . Actuellement, il documente 38 odeurs d'architecture et plus de 260 odeurs de code au total.

Tushar
la source