Чи запахи архітектури?


37

В Інтернеті є багато ресурсів, що посилаються на та перелічують запахи коду. Однак я ніколи не бачив інформації про архітектурні запахи . Чи визначено це десь і чи є список? Чи проводилися якісь офіційні дослідження дефектів архітектури та їх впливу на швидкість проекту, дефекти тощо?

Редагувати: Я не шукав списку відповідей, але документація (в Інтернеті чи в книзі) про архітектуру пахне.


4
Тільки тоді, коли архітектор має погані звички особистої гігієни ...
FrustratedWithFormsDesigner

Я справді не мав на увазі для вас перелічити запахи тут. Може бути посилання на список?
К. Росс

Росс Вибачте, що цього не зрозумів. Я лише додав кілька вражень.
Амір Резай

@Amir Rezaei твій найкращий з лоту, принаймні ти зведев свій список в одну посаду.
C. Росс

Відповіді:


33
  • Багатоярусна архітектура Коли у вас є шари на шарах, на шарах на шарах ... ви бачите мою думку тут, у вашій програмі. Я називаю це над багатошаровою архітектурою
  • Над абстрагуванням таким чином, що ви загубитесь у коді.
  • Футуристична архітектура Це відбувається, коли рішення занадто футуристичне. Насправді ніхто не може передбачити нових вимог. Тому більшість футуристичних реалізацій - це лише витрата часу та ресурсів.
  • Захоплена технологія архітектури Архітектору сподобалась нова технологія, і він поставив у виробництво. Не знаючи, чи це було доведено раніше.
  • Over Kill Architecture Проста проблема була вирішена експоненціальним фактором архітектурних навичок та технологій.
  • Хмарна архітектура Я називаю це хмарною архітектурою, оскільки архітектура насправді не має жодного зв'язку. Це просто кілька приємних діаграм Visio.

Повна відсутність протилежного також вірна.

Ось посилання на десять помилок архітектури програмного забезпечення .


1
Я погоджуюся з цим, я бачив абсурдні шаруваті програми (до 9 шарів)

7
Баклава архітектура?
Ендрю Арнольд

15
ах, близький щодо коду спагетті, мені подобається називати це «Кодом
Лазаньї

6
Ooh @GSto - код спагетті в архітектурі Лазаньї. Повний ансамбль можна було б назвати "маленькою Італією".
Гленатрон

2
У деяких місцях application_layers == (developers_assigned - 1), тому що хтось в кінцевому підсумку стає PM.
сл

20

Все налаштовується . Коли архітектор каже вам, що його система є стійкою до змін або налаштовується через велику налаштованість, це запах архітектури.

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

І тоді ви перебуваєте в програмному пеклі.


Цікаво, що ефект внутрішньої платформи є пекельним, і все ж багато людей дивляться на розвиток DSL, орієнтований на наступну велику річ, яка за дизайном є трохи внутрішньо платформою.
гленатрон

@glenatron: Може, в цьому справа? Чому б просто не кинути рушник і припустити, що це станеться. Тоді ви можете розробити разом із DSL та змінити реалізацію, щоб вирішити більше конфігурації.
Джеремі Хайлер

Я б сказав, що DSL - це так, як це робить DSL. Це хороші способи та погані способи їх реалізації. Коли я думаю про те, як це можна зробити правильно, я думаю про безліч DSL, які складають Ruby on Rails. Вони не реалізують свою власну мову - вони просто конструкції в рамках програми Ruby, але вони вміло і корисно абстрагують багато деталей того, для чого вони є мовою. Там, де IPE дійсно починає смердити на високе небо - це коли ви переходите з мови, що залежить від домену, до все більш узагальненого мови, що починає виглядати дуже схоже на мову, на якій він реалізований.
Адам Кросленд,

Я нещодавно читав про DSL, у Jetbrains є MPS, що виглядає цікаво, але поки не можу його використати. Вони стверджують, що використовують його на деяких своїх продуктах, тому я можу запитати, які саме та як.
Ян

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

9

База даних, розроблена ОРМ! Або бекенден для бази даних, який не є реляційним, і має бути реляційним. Або база даних, де ви розробляєте використання представлень, які викликають представлення даних, які переглядають виклики, не тільки вони занадто повільні (бази даних повинні бути розроблені для продуктивності з самого початку не пізніше), але коли вам потрібно внести зміни, вони будуть жахливо відстежувати (Через абстракцію, як сказав @AmirResaei, це легко втрачається в коді, коли вам потрібно виправити щось, що знаходиться внизу всіх цих шарів.)


Це мертвий на. На жаль, це стає більшою проблемою, оскільки апаратне забезпечення стає швидшим. Він працює швидко на 10 записах, чому б він не працював зі 100 000 000?
Джефф Девіс

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

3

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

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

Більшість рефакторингу робиться для зменшення неоптимального коду за допомогою вдосконаленої архітектури. Можна стверджувати, що єдиним природженим «архітектурним запахом» (окрім Великого куля грязі) буде архітектура BDUF (Big Design Up Front). Де ви намагаєтеся вмістити все необхідне до того, як буде написано перший рядок коду. Швидкий програмний проект, де дизайн робиться за потребою (навіть я смію сказати, коли код трактується як дизайн ), його архітектура буде органічно зростати.


1
Цікавий момент, чи можете ви навести приклад?
Тревіс Крістіан

Розумне кодування - запах коду.
Крістофер Махан

Відповідь, яка робить заяву без підтвердження фактів. Запах відповіді?
Еван Плейс

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

@MikeBrown +1 Я зазнавав пильного, але приємного вдосконалення.
Еван Плейс

2

(Багато) З'єднання - в будь-якій формі - це те, що викликає запах архітектури. Чим більше вона сполучена, тим більше пахне.

Це говорило: жодна муфта взагалі часто не пахне питаннями продуктивності.


1
Я з цим не погоджуюся. Якщо ви говорите про бізнес-додатки, зв'язок із базою даних, яка малоймовірна для зміни, є розумною, а не дурною. Ви можете використовувати функцію більшої продуктивності, яка залежить від бази даних.
HLGEM

+1, але YMMV Використовуйте обережно.
Майкл К

1
Ось чому я додав, що "жодна муфта взагалі часто не має запахів щодо продуктивності". Я згоден, що для підвищення продуктивності вам доведеться використовувати з'єднання. Коли архітектура скрізь (між різними модулями / класами / незалежно від вашої програми) виникає архітектурна проблема.
Клайм

2

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

Це, звичайно, добре в деяких ситуаціях (тобто легких звітах), але в багатьох випадках вимоги щодо звітності та транзакційної обробки суперечать. Однак, оскільки це дуже просто / недорого зробити, звіти запускаються безпосередньо з БД трансакцій. Це викликає всілякі головні болі по обидва боки рівняння.

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

Розробляючи систему, архітектор справді повинен усвідомлювати, що вимоги до звітності - особливо звіти про аналіз - та трансакційні вимоги найкраще трактувати як окремі питання, а не просто збирати разом на рівні бази даних.


0

Я не впевнений, чи правильно це відповідає архітектурному рівню, але якщо я бачу купу класів / модулів менеджерів у тому, що має бути дизайном ОО, то це є гарантією того, що єдиний, хто зрозуміє архітектуру / дизайн є самим архітектором / дизайнером без багато пояснень / навчання іншими.


0

Є багато запахів архітектури, задокументованих громадою. Часто зустрічається безліч.

  • Циклічна залежність: Цей запах виникає, коли два чи більше архітектурних компонентів залежать один від одного прямо чи опосередковано.
  • Нестабільна залежність: Цей запах виникає, коли компонент залежить від інших компонентів, які менш стійкі, ніж він сам.
  • Компонент Бога: Цей запах виникає тоді, коли компонент надмірно великий або за значенням LOC, або за кількістю класів.
  • Концентрація функції: Цей запах виникає, коли компонент реалізує більше ніж один архітектурний предмет / особливість.
  • Розсіяна функціональність: Цей запах виникає, коли за реалізацію однієї проблеми на високому рівні відповідає декілька компонентів.
  • Щільна структура: Цей запах виникає, коли компоненти мають надмірну і щільну залежність без особливої ​​структури.

Нещодавно я підготував таксономію запахів . Наразі він документує 38 запахів архітектури та понад 260 загальних запахів коду.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.