Czy są zapachy architektury?

37

W sieci jest mnóstwo zasobów odnoszących się do zapachów kodu i wyświetlających je na liście. Jednak nigdy nie widziałem informacji o zapachach architektonicznych . Czy jest to gdzieś zdefiniowane i czy jest dostępna lista? Czy przeprowadzono formalne badania defektów architektury i ich wpływu na szybkość projektu, defekty i tym podobne?

Edycja: Tak naprawdę nie szukałem listy w odpowiedziach, ale dokumentacja (w Internecie lub w książce) o architekturze pachnie.

Krzyż
źródło
4
Tylko wtedy, gdy architekt ma złe nawyki higieniczne ...
FrustratedWithFormsDesigner
Naprawdę nie chciałem, żebyście wymienili tutaj zapachy. Może link do listy?
C. Ross
Ross Przepraszam, nie zdawałem sobie z tego sprawy. Właśnie dodałem kilka doświadczeń.
Amir Rezaei,
@Amir Rezaei twoja jest najlepsza z wszystkich, przynajmniej skonsolidowałeś swoją listę w jednym poście.
C. Ross

Odpowiedzi:

33
  • Architektura wielowarstwowa Kiedy masz Warstwy na Warstwach na Warstwach na Warstwach ... mój punkt tutaj widzisz w swojej aplikacji. Nazywam to architekturą warstwową
  • Nadmiar abstrakcji w taki sposób, że gubisz się w kodzie.
  • Futurystyczna architektura Dzieje się tak, gdy rozwiązanie jest zbyt futurystyczne. W rzeczywistości nikt nie jest w stanie przewidzieć nowych wymagań. Dlatego większość futurystycznych wdrożeń to tylko strata czasu i zasobów.
  • Technologia Entuzjastyczna architektura Architektowi spodobała się nowa technologia i wprowadził ją do produkcji. Nie wiedząc, czy zostało to wcześniej udowodnione.
  • Architektura Over Kill Prosty problem został rozwiązany przez wykładniczy czynnik umiejętności i technologii architektury.
  • Architektura chmur Nazywam to architekturą chmurową, ponieważ architektura nie ma żadnego związku z rzeczywistością. To tylko kilka ładnych diagramów Visio.

Zupełny brak jest również prawdą.

Oto link do dziesięciu najczęstszych błędów architektury oprogramowania .

Amir Rezaei
źródło
1
Zgadzam się w tej sprawie, widziałem absurdalną aplikację warstwową (do 9 warstw)
7
Architektura baklawy?
Andrew Arnold
15
ah, bliski krewny do kodu spaghetti, lubię nazywać to „Kodem Lasagna”
GSto
6
Ooh @GSto - Kod Spaghetti w architekturze Lasagna. Cały zespół można nazwać „małymi Włochami”.
glenatron
2
W niektórych miejscach application_layers == (developers_assigned - 1), ponieważ ktoś kończy na PM.
sal
20

Wszystko jest konfigurowalne . Kiedy architekt mówi ci, że jego system jest odporny na zmiany lub wysoce konfigurowalny z powodu szerokiej konfiguracji, to zapach architektury.

Problem polega na tym, że naprawdę możesz dostarczyć tylko mechanizmy konfiguracji dla tego, co według ciebie będzie wymagało skonfigurowania, ale gdy aplikacja będzie już na wolności, nie będzie wystarczająca. Następnie mechanizmy konfiguracji rozszerzają się i rozszerzają, a ostatecznie uzyskuje się efekt platformy wewnętrznej.

A potem jesteś w piekle oprogramowania.

Adam Crossland
źródło
Interesujące jest to, że efekt Inner Platform jest piekielny, a jednak wiele osób patrzy na rozwój zorientowany na DSL jako Next Big Thing, który moim zdaniem jest nieco platformą wewnętrzną.
glenatron
@glenatron: Może o to chodzi? Dlaczego nie rzucić ręcznika i założyć, że tak się stanie. Następnie możesz rozwinąć swoją DSL i zmodyfikować implementację, aby poradzić sobie z większą konfiguracją.
Jeremy Heiler
Powiedziałbym, że DSL działa tak jak DSL. To są dobre i złe sposoby wdrożenia. Kiedy myślę o tym, jak to zrobić dobrze, myślę o wielu DSL, które tworzą Ruby on Rails. Nie implementują własnego języka - są tylko konstrukcjami w programie Ruby, ale sprytnie i pomocnie usuwają wiele szczegółów tego, dla czego są językiem. IPE naprawdę zaczyna śmierdzieć w niebiosach, kiedy przechodzisz z języka specyficznego dla domeny do coraz bardziej ogólnego języka, który zaczyna wyglądać podobnie do języka, w którym jest implementowany.
Adam Crossland
Czytałem ostatnio o DSL, Jetbrains mają MPS, który wygląda interesująco, ale nie mogę sobie wyobrazić korzystania z niego. Twierdzą, że używają go w niektórych swoich produktach, więc mogę zapytać, które z nich i jak.
Ian
Głosowałbym za tym 100 000 000 razy, gdybym mógł. Jeśli kiedykolwiek korzystałeś z narzędzia do zarządzania projektami o nazwie Clarity, zrozumiałbyś, dlaczego jest to okropny wybór architektury!
HLGEM
9

Baza danych zaprojektowana przez ORM! Lub backend bazy danych, który jest nierelacyjny i powinien być relacyjny. Lub baza danych, w której zaprojektowano korzystanie z widoków wywołujących widoki, które wywołują widoki, nie tylko są one zbyt wolne (bazy danych muszą być projektowane pod kątem wydajności od początku nie później), ale gdy trzeba wprowadzić zmiany, śledzenie ich jest okropne (Nadmiar abstrakcji, jak powiedział @AmirResaei, ułatwia zagubienie się w kodzie, gdy trzeba naprawić coś, co znajduje się na dole wszystkich tych warstw).

HLGEM
źródło
To jest martwe. Niestety, staje się to coraz większym problemem, ponieważ sprzęt staje się szybszy. Działa szybko na 10 płytach, dlaczego nie miałby działać z 100 000 000?
Jeff Davis
4
dla mnie ORM to zapach architektury.
Christopher Mahan
3

Zapachy kodowe i zapachy architektoniczne są jednym i tym samym. Kod zaczyna „wąchać” z powodu nieoptymalnej architektury.

W przełomowej książce Martina Fowlera na ten temat, Refaktoryzacja , przedstawia serię zapachowych kodów i identyfikuje sposób na ich refaktoryzację z twojego systemu. Refaktoryzacja wzorców przez Joshua Kerievsky'ego jeszcze bardziej podkreśla ten pomysł, podając konkretne wzory architektoniczne, aby naprawić różne zapachy kodu (i jak refaktoryzować je krok po kroku).

Większość refaktoryzacji ma na celu złagodzenie suboptymalnego kodu poprzez ulepszoną architekturę. Można argumentować, że jedynym naturalnie urodzonym „Architectural Smell” (innym niż Big Ball of Mud) byłaby architektura BDUF (Big Design Up Front). Gdzie próbujesz pomieścić wszystko, czego potrzebujesz przed napisaniem pierwszego wiersza kodu. Zwinny projekt oprogramowania, w którym projektowanie jest wykonywane w razie potrzeby (nawet ja twierdzę, że kod jest traktowany jako projektowanie ), będzie miał organicznie rozwijaną architekturę.

Michael Brown
źródło
1
Ciekawe, czy możesz podać przykład?
Travis Christian
Sprytne kodowanie to zapach kodu.
Christopher Mahan
Odpowiedź, która składa oświadczenie bez poparcia faktów. Odpowiedź zapach?
Evan Plaice,
@EvanPlaice Moje przeprosiny. Mam nadzieję, że moja edycja dostarczy trochę więcej informacji na temat tego, jak dotarłam do mojej odpowiedzi.
Michael Brown,
@MikeBrown +1 Byłem żartobliwy, ale miłą poprawą.
Evan Plaice
2

(Dużo) Sprzęganie - w jakiejkolwiek formie - powoduje zapach architektury. Im bardziej jest sprzężony, tym bardziej pachnie.

To powiedziawszy: brak sprzężenia często wącha problemy z wydajnością.

Klaim
źródło
1
Muszę się z tym nie zgodzić. Jeśli mówisz o aplikacjach biznesowych, połączenie z bazą danych, której zmiana jest mało prawdopodobna, jest mądre, a nie głupie. Możesz użyć funkcji większej wydajności, która jest specyficzna dla bazy danych.
HLGEM
+1, ale YMMV. Używaj ostrożnie.
Michael K
1
Dlatego dodałem: „brak sprzężenia w ogóle często wącha problemy z wydajnością”. Zgadzam się, że musisz użyć sprzężenia, aby zwiększyć wydajność. Kiedy występuje wszędzie sprzężenie (między różnymi modułami / klasami / dowolną aplikacją), pojawia się problem architektoniczny.
Klaim
2

Oto jeden konkretny zapach architektury / projektowania, z którym ciągle się spotykam: analiza i raportowanie bezpośrednio z transakcyjnej bazy danych.

Z pewnością jest to OK w niektórych sytuacjach (np. Lekkie raporty), ale w wielu przypadkach wymagania dotyczące raportowania i przetwarzania transakcji są w konflikcie. Ponieważ jednak jest to prosta / niedroga rzecz, raporty są uruchamiane bezpośrednio z transakcyjnej bazy danych. Powoduje to różnego rodzaju bóle głowy po obu stronach równania.

Zazwyczaj jest to widoczne w aplikacjach Enterprise LOB, btw. Rozumiem, że wiele małych i średnich firm po prostu nie ma zasobów ani wiedzy, aby tworzyć magazyny i karty danych (zapomnij o kostkach lub ustawieniach zmniejszania mapy), ale wiele większych organizacji, z którymi pracowałem, ma te same problemy.

Projektując system, architekt powinien mieć świadomość, że raportowanie - zwłaszcza raporty analityczne - i wymagania transakcyjne najlepiej traktować jako osobne problemy, a nie tylko skupiać je na poziomie bazy danych.

Curtis Batt
źródło
0

Nie jestem pewien, czy to słusznie pasuje na poziomie architektury, ale jeśli widzę kilka klas menedżerów / modułów w projekcie, który powinien być projektem OO, to jest to gwarancja, że ​​jedyna osoba, która zrozumie architekturę / projekt jest architektem / projektantem bez wielu wyjaśnień / uczenia się przez innych.

Maczać
źródło
0

Społeczność dokumentuje wiele zapachów architektury. Najczęściej występujący zestaw jest następujący.

  • Cykliczna zależność: ten zapach powstaje, gdy dwa lub więcej elementów architektury zależy od siebie bezpośrednio lub pośrednio.
  • Niestabilna zależność: ten zapach powstaje, gdy składnik zależy od innych składników, które są mniej stabilne niż on sam.
  • God Component: Ten zapach pojawia się, gdy składnik jest nadmiernie duży, zarówno pod względem LOC, jak i liczby klas.
  • Stężenie cech: ten zapach pojawia się, gdy element zdaje sobie sprawę z więcej niż jednego problemu / cechy architektonicznej.
  • Rozproszona funkcjonalność: ten zapach powstaje, gdy wiele elementów jest odpowiedzialnych za realizację tego samego problemu na wysokim poziomie.
  • Gęsta struktura: ten zapach powstaje, gdy składniki mają nadmierne i gęste zależności bez żadnej konkretnej struktury.

Niedawno przygotowałem taksonomię zapachów . Obecnie dokumentuje 38 zapachów architektury i ponad 260 zapachów kodu.

Tuszar
źródło