¿Hay olores de arquitectura?


37

Hay toneladas de recursos en la web que hacen referencia y enumeran olores de código. Sin embargo, nunca he visto información sobre olores arquitectónicos . ¿Está definido en alguna parte, y hay una lista disponible? ¿Se ha realizado alguna investigación formal sobre defectos de arquitectura y su impacto en la velocidad del proyecto, defectos y similares?

Editar: Realmente no estaba buscando una lista en las respuestas, sino documentación (en la web o en un libro) sobre olores de arquitectura.


44
Solo cuando el arquitecto tiene malos hábitos de higiene personal ...
FrustratedWithFormsDesigner

Realmente no quise que todos enumeraran los olores aquí. Quizás enlace a una lista?
C. Ross

Ross Lo siento, no me di cuenta de eso. Acabo de agregar algunas experiencias.
Amir Rezaei

@Amir Rezaei el tuyo es el mejor del lote, al menos consolidó su lista en una publicación.
C. Ross

Respuestas:


33
  • Arquitectura multinivel Cuando tienes capas en capas en capas en capas ... ves mi punto aquí, en tu aplicación. Lo llamo sobre arquitectura en capas
  • Sobre abstracción de tal manera que te pierdas en el código.
  • Arquitectura futurista Esto sucede cuando la solución es demasiado futurista. En realidad, nadie puede predecir nuevos requisitos. Por lo tanto, la mayor parte de la implementación futurista es solo una pérdida de tiempo y recursos.
  • Arquitectura entusiasta de la tecnología Al arquitecto le gustó la nueva tecnología y la puso en producción. Sin saber si se probó antes.
  • Over Kill Architecture Un problema simple se resolvió mediante el factor exponencial de las habilidades y la tecnología de la arquitectura.
  • Arquitectura en la nube La llamo arquitectura en la nube ya que la arquitectura no tiene conexión con la realidad. Son solo algunos bonitos diagramas de Visio.

La falta total de lo contrario también es cierto.

Aquí hay un enlace de los diez errores principales de la arquitectura de software .


1
Estoy de acuerdo con esto, he visto una aplicación en capas absurda (hasta 9 capas)

77
Arquitectura Baklava?
Andrew Arnold

15
ah, el pariente cercano al código de espagueti, me gusta llamar a esto 'Código de lasaña'
GSto

66
Ooh @GSto - Código de espagueti en la arquitectura de lasaña. El conjunto completo podría llamarse "pequeña Italia".
glenatron

2
En algunos lugares, application_layers == (developers_assigned - 1) porque alguien termina siendo el primer ministro.
sal

20

Todo es configurable . Cuando un arquitecto le dice que su sistema es a prueba de cambios o altamente personalizable debido a su amplia capacidad de configuración, es un olor a arquitectura.

El problema es que realmente solo puede proporcionar mecanismos de configuración para lo que cree que en este momento va a necesitar configurarse, pero una vez que su aplicación esté en estado salvaje, no será suficiente. Luego, los mecanismos de configuración se expanden y expanden, y eventualmente obtienes el efecto de plataforma interna.

Y luego estás en el infierno del software.


Sin embargo, es interesante que el efecto de plataforma interna es infernal y, sin embargo, mucha gente está considerando el desarrollo orientado a DSL como Next Big Thing, que es un diseño ligeramente interno de plataforma, creo.
glenatron

@glenatron: ¿Tal vez ese es el punto? ¿Por qué no simplemente tirar la toalla y asumir que va a suceder? Luego puede desarrollar con su DSL y modificar la implementación para manejar más configuraciones.
Jeremy Heiler

Yo diría que DSL es como lo hace DSL. Son buenas y malas formas de implementar. Cuando pienso en cómo se puede hacer bien, pienso en las muchas DSL que componen Ruby on Rails. No implementan su propio lenguaje: son solo construcciones dentro de un programa Ruby, pero resumen de manera inteligente y útil muchos de los detalles de lo que son un idioma. Donde el IPE realmente comienza a apestar al cielo es cuando pasas del lenguaje específico de dominio a un lenguaje cada vez más generalizado que comienza a parecerse mucho al lenguaje en el que está implementado.
Adam Crossland

Estaba leyendo sobre DSL recientemente, Jetbrains tiene su MPS que parece interesante, pero aún no puedo concebir usarlo. Afirman usarlo en algunos de sus productos, por lo que podría preguntar para ver cuáles y cómo.
Ian

Votaría esto 100,000,000 de veces si pudiera. Si alguna vez ha utilizado la herramienta de gestión de proyectos llamada Clarity, entenderá por qué esta es una elección de arquitectura horrible.
HLGEM

9

¡Una base de datos diseñada por un ORM! O un backend de base de datos que no es relacional y que debería ser relacional. O una base de datos donde diseñe para usar vistas que llaman vistas que llaman vistas, no solo son demasiado lentas (las bases de datos deben estar diseñadas para el rendimiento desde el principio y no más tarde) sino que cuando necesita hacer un cambio, es horrible rastrearlas (Sobre la abstracción, como dijo @AmirResaei, es fácil perderse en el código cuando necesita arreglar algo que está en la parte inferior de todas esas capas).


Esto está muerto. Lamentablemente, se está convirtiendo en un problema mayor a medida que el hardware se vuelve más rápido. Funciona rápido en 10 registros, ¿por qué no funcionaría con 100,000,000?
Jeff Davis

44
para mí, ORM es olor a arquitectura.
Christopher Mahan

3

Los olores de código y los olores arquitectónicos son lo mismo. El código comienza a "oler" debido a una arquitectura subóptima.

En el libro seminal de Martin Fowler sobre el tema, Refactorización , presenta una serie de olores de código e identifica la forma de refactorizarlos de su sistema. Refactoring to Patterns de Joshua Kerievsky enfatiza aún más esta idea al dar patrones arquitectónicos específicos para arreglar varios olores de código (y cómo refactorizarlos paso a paso).

La mayor parte de la refactorización se realiza para aliviar el código subóptimo a través de una arquitectura mejorada. Se podría argumentar que el único "Olor Arquitectónico" nacido naturalmente (aparte de Big Ball of Mud) sería la Arquitectura BDUF (Big Design Up Front). Donde intenta acomodar todo lo que necesita antes de escribir la primera línea de código. Un proyecto de software ágil donde el diseño se realiza según sea necesario (incluso me atrevo a decir que el código se trata como diseño ), hará que su arquitectura crezca orgánicamente.


1
Punto interesante, ¿puedes dar un ejemplo?
Travis Christian

La codificación inteligente es olor a código.
Christopher Mahan

Una respuesta que hace una declaración sin hechos de apoyo. Respuesta olor?
Evan Plaice

@EvanPlaice Mis disculpas. Espero que mi edición proporcione más información sobre cómo llegué a mi respuesta.
Michael Brown

@MikeBrown +1 Estaba siendo gracioso pero mejoría agradable.
Evan Plaice

2

(Una gran cantidad de) El acoplamiento, en cualquier forma, es lo que hace que las arquitecturas huelan. Cuanto más se junta, más huele.

Dicho esto: ningún acoplamiento a menudo huele a problemas de rendimiento.


1
Tengo que estar en desacuerdo con eso. Si habla de aplicaciones comerciales, el acoplamiento a una base de datos que es muy poco probable que cambie es inteligente, no estúpido. Puede usar la función de rendimiento más específica de la base de datos.
HLGEM

+1 pero YMMV. Usar con precaución.
Michael K

1
Es por eso que agregué "sin acoplamiento, a menudo huele problemas de rendimiento". Estoy de acuerdo en que debe usar el acoplamiento para mejorar el rendimiento. Es cuando hay mucho acoplamiento en todas partes (entre los diferentes módulos / clases / lo que sea de su aplicación) que hay un problema arquitectónico.
Klaim

2

Aquí hay un olor a arquitectura / diseño concreto que encuentro todo el tiempo: análisis e informes directamente desde una base de datos transaccional.

Esto sin duda está bien en algunas situaciones (es decir, informes ligeros), pero en muchos casos los requisitos de procesamiento de informes y transacciones están en conflicto. Sin embargo, debido a que es algo simple y económico, los informes se ejecutan directamente desde la base de datos transaccional. Esto causa todo tipo de dolores de cabeza en ambos lados de la ecuación.

Esto se ve típicamente en las aplicaciones Enterprise LOB, por cierto. Entiendo que muchas PYMES simplemente no tienen los recursos o el conocimiento para crear almacenes y datamarts (olvídate de los cubos o configuraciones de reducción de mapas), pero muchas organizaciones más grandes con las que he trabajado tienen los mismos problemas.

Al diseñar un sistema, el arquitecto realmente debe ser consciente de que los informes, especialmente los informes de análisis, y los requisitos transaccionales se tratan mejor como problemas separados y no solo agrupados a nivel de la base de datos.


0

No estoy seguro de si esto encaja correctamente en el nivel de arquitectura, pero si veo un montón de clases / módulos de administrador en lo que se supone que es un diseño OO, entonces eso es una garantía de que la única persona que entenderá la arquitectura / diseño es el arquitecto / diseñador mismo sin mucha explicación / aprendizaje por parte de otros.


0

Hay muchos olores de arquitectura documentados por la comunidad. Un conjunto común es el siguiente.

  • Dependencia cíclica: este olor surge cuando dos o más componentes de la arquitectura dependen el uno del otro directa o indirectamente.
  • Dependencia inestable: este olor surge cuando un componente depende de otros componentes que son menos estables que él.
  • Componente de Dios: este olor ocurre cuando un componente es excesivamente grande, ya sea en términos de LOC o número de clases.
  • Concentración de características: este olor se produce cuando un componente se da cuenta de más de una preocupación / característica arquitectónica.
  • Funcionalidad dispersa: este olor surge cuando múltiples componentes son responsables de darse cuenta de la misma preocupación de alto nivel.
  • Estructura densa: este olor surge cuando los componentes tienen dependencias excesivas y densas sin ninguna estructura en particular.

Recientemente preparé una taxonomía de olores . Actualmente, documenta 38 olores de arquitectura y más de 260 olores de código total.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.