Есть ли запахи в архитектуре?


37

В Интернете существует множество ресурсов, которые ссылаются на запахи кода. Однако я никогда не видел информации об архитектурных запахах . Это определено где-нибудь, и есть ли список? Были ли проведены какие-либо формальные исследования дефектов архитектуры и их влияния на скорость проекта, дефекты и тому подобное?

Изменить: я не искал список ответов, но документация (в Интернете или в книге) об запахах архитектуры.


4
Только когда у архитектора плохие привычки в личной гигиене ...
FrustratedWithFormsDesigner

Я действительно не хотел, чтобы вы перечислили запахи здесь. Может быть, ссылка на список?
К. Росс

Росс Извините, я не осознавал этого. Я только добавил несколько опытов.
Амир Резаи

@ Амир Резаи твой лучший из всех, по крайней мере, ты объединил свой список в один пост.
К. Росс

Ответы:


33
  • Многоуровневая архитектура Когда у вас есть слои на слоях на слоях на слоях ... вы видите мою точку зрения здесь, в вашем приложении. Я называю это « Многоуровневая архитектура»
  • Над абстракцией таким образом, что вы заблудились в коде.
  • Футуристическая архитектура Это происходит, когда решение слишком футуристическое. На самом деле никто не может предсказать новые требования. Поэтому большая часть футуристической реализации - это просто трата времени и ресурсов.
  • Технология Энтузиазма Архитектура Архитектору понравились новые технологии, и он запустил их в производство. Не зная, доказано ли это раньше.
  • Over Kill Architecture Простая проблема была решена экспоненциальным фактором архитектурных навыков и технологий.
  • Облачная архитектура Я называю это облачной архитектурой, поскольку архитектура не имеет никакого отношения к реальности. Это просто хорошие диаграммы Visio.

Полное отсутствие обратного также верно.

Вот ссылка на десятку ошибок архитектуры программного обеспечения .


1
Я согласен с этим, я видел абсурдное многоуровневое приложение (до 9 слоев)

7
Пахлавская архитектура?
Эндрю Арнольд

15
ах, близкий родственник коду спагетти, мне нравится называть этот код Лазанья
GSto

6
Ооо @GSto - код спагетти в архитектуре лазаньи. Полный ансамбль можно назвать «маленькой Италией».
Гленатрон

2
В некоторых местах application_layers == (developers_assigned - 1), потому что кто-то в конечном итоге становится PM.
Sal

20

Все настраивается . Когда архитектор говорит вам, что его система защищена от изменений или имеет широкие возможности настройки из-за обширной настраиваемости, это - запах архитектуры.

Проблема в том, что вы действительно можете предоставить механизмы конфигурации только для того, что, по вашему мнению, сейчас нужно будет настроить, но как только ваше приложение будет запущено, этого будет недостаточно. Затем механизмы конфигурации расширяются и расширяются, и в конечном итоге вы получаете эффект внутренней платформы.

И тогда вы в программном аду.


Интересно, что эффект Inner Platform является адским, и все же многие люди рассматривают разработку, ориентированную на DSL, как Next Big Thing, которая, по моему мнению, слегка внутренне-платформенная.
Гленатрон

@glenatron: Может быть, в этом суть? Почему бы просто не бросить полотенце и предположить, что это произойдет. Затем вы можете разрабатывать с вашим DSL и изменять реализацию, чтобы иметь дело с большей конфигурацией.
Джереми Хейлер

Я бы сказал, что DSL такой же, как и DSL. Это хорошие и плохие способы реализации. Когда я думаю о том, как это можно сделать правильно, я думаю о многих DSL, составляющих Ruby on Rails. Они не реализуют свой собственный язык - они просто конструкции внутри Ruby-программы, но они умно и услужливо абстрагируют многие детали того, для чего они предназначены. Когда IPE действительно начинает вонять на небеса, это когда вы переходите от предметно-ориентированного языка к все более обобщенному языку, который начинает очень похож на язык, на котором он реализован.
Адам Кроссленд

Я недавно читал о DSL, у Jetbrains есть свои MPS, которые выглядят интересно, но я пока не могу представить себе их использование. Они утверждают, что используют его на некоторых своих продуктах, поэтому я мог бы спросить, какие из них и как.
Ян

Я бы проголосовал за это 100 000 000 раз, если бы мог. Если бы вы когда-либо использовали инструмент управления проектами под названием Clarity, вы бы поняли, почему это ужасный выбор архитектуры!
HLGEM

9

База данных, разработанная ORM! Или серверная часть базы данных, которая не является реляционной и должна быть реляционной. Или база данных, в которой вы разрабатываете использование представлений, которые вызывают представления, которые вызывают представления, они не только слишком медленные (базы данных должны быть спроектированы для обеспечения производительности с самого начала, но не позднее), но когда вам нужно внести изменения, их ужасно отслеживать (Из-за абстракции, как сказал @AmirResaei, легко потеряться в коде, когда вам нужно исправить что-то, что находится внизу всех этих слоев.)


Это мертвый на. К сожалению, это становится все более серьезной проблемой, поскольку аппаратное обеспечение становится быстрее. Он работает быстро на 10 записях, почему бы не работать с 100 000 000?
Джефф Дэвис

4
для меня ORM - это запах архитектуры.
Кристофер Махан

3

Кодовые запахи и архитектурные запахи - это одно и то же. Код начинает «пахнуть» из-за неоптимальной архитектуры.

В основной книге Мартина Фаулера по теме « Рефакторинг» он представляет серию запахов кода и определяет способ их рефакторинга из вашей системы. « Рефакторинг шаблонов» Джошуа Кериевского еще более подчеркивает эту идею, предоставляя конкретные архитектурные шаблоны для исправления различных запахов кода (и как выполнять рефакторинг для них шаг за шагом).

Большая часть рефакторинга выполняется для облегчения неоптимального кода с помощью улучшенной архитектуры. Можно утверждать, что единственным естественным «архитектурным запахом» (кроме Big Ball of Mud) будет архитектура BDUF (Big Design Up Front). Где вы пытаетесь разместить все, что вам нужно, до того, как написана первая строка кода. Гибкий программный проект, в котором дизайн выполняется по мере необходимости (даже, полагаю, когда код рассматривается как дизайн ), его архитектура будет расти органично.


1
Интересный момент, можете ли вы привести пример?
Трэвис Кристиан

Умное кодирование - это запах кода.
Кристофер Махан

Ответ, который делает заявление без подтверждающих фактов. Отвечать запахом?
Эван Плейс

@EvanPlaice Мои извинения. Надеюсь, что мое редактирование даст мне больше понимания того, как я пришел к своему ответу.
Майкл Браун

@MikeBrown +1 Я был шутливый, но хорошее улучшение.
Эван Плейс

2

(Много) Соединение - в любой форме - это то, что заставляет архитектуры пахнуть. Чем больше он связан, тем больше он пахнет.

Тем не менее, отсутствие связи вообще часто пахнет проблемами производительности.


1
Я должен не согласиться с этим. Если вы говорите о бизнес-приложениях, связывание с базой данных, которая вряд ли изменится, будет умным, а не глупым. Вы можете использовать более высокую производительность, специфичную для базы данных.
HLGEM

+1, но YMMV. Используйте с осторожностью.
Майкл К

1
Вот почему я добавил, что «отсутствие связи вообще часто пахнет проблемами производительности». Я согласен, что вы должны использовать связь для повышения производительности. Именно тогда, когда существует большая взаимосвязь (между различными модулями / классами / любым приложением), возникает архитектурная проблема.
Klaim

2

Вот один конкретный запах архитектуры / дизайна, с которым я сталкиваюсь все время: анализ и составление отчетов непосредственно из транзакционной базы данных.

Это, конечно, хорошо в некоторых ситуациях (например, легкие отчеты), но во многих случаях требования к отчетности и обработке транзакций находятся в конфликте. Тем не менее, поскольку это простая / недорогая вещь, отчеты запускаются непосредственно из транзакционной БД. Это вызывает все виды головных болей с обеих сторон уравнения.

Это обычно видно в приложениях Enterprise LOB, кстати. Я понимаю, что многие SMB просто не имеют ресурсов или ноу-хау для создания хранилищ и информационных таблиц (забудьте о кубах или настройках сокращения карт), но многие большие организации, с которыми я работал, имеют те же проблемы.

При проектировании системы архитектор должен учитывать, что отчетность, особенно аналитические отчеты, и требования к транзакциям лучше всего рассматривать как отдельные проблемы, а не просто объединять их на уровне базы данных.


0

Я не уверен, подходит ли это на уровне архитектуры, но если я увижу кучу классов / модулей менеджера в том, что должно быть ОО-проектом, то это гарантия того, что единственный человек, который поймет архитектуру / дизайн сам архитектор / дизайнер без большого объяснения / изучения другими.


0

Сообщество задокументировало множество архитектурных запахов. Обычно встречающийся набор следующий.

  • Циклическая зависимость: этот запах возникает, когда два или более архитектурных компонента зависят друг от друга прямо или косвенно.
  • Нестабильная зависимость: этот запах возникает, когда компонент зависит от других компонентов, которые менее стабильны, чем он сам.
  • Компонент Бога: Этот запах возникает, когда компонент слишком велик либо с точки зрения LOC, либо с точки зрения количества классов.
  • Концентрация элементов : этот запах возникает, когда компонент реализует более одной архитектурной задачи / функции.
  • Разрозненная функциональность: этот запах возникает, когда несколько компонентов отвечают за реализацию одной и той же проблемы высокого уровня.
  • Плотная структура: этот запах возникает, когда компоненты имеют чрезмерную и плотную зависимость без какой-либо конкретной структуры.

Я недавно подготовил таксономию запахов . В настоящее время он документирует 38 запахов архитектуры и более 260 запахов кода.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.