Mimari kokular var mı?


37

Web'de kod kokularına atıfta bulunan ve listeleyen çok sayıda kaynak var. Ancak, mimari kokular hakkında hiç bilgi görmedim . Bu bir yerde tanımlanmış mı ve mevcut bir liste var mı? Mimari hatalar ve bunların proje hızı, kusurlar ve benzeri üzerindeki etkileri hakkında herhangi bir resmi araştırma yapılmış mı?

Düzenleme: Cevaplarında gerçekten bir liste aramıyordum, fakat mimarlık kokuyor hakkında belgeler (web'de veya bir kitapta).


4
Mimar yoksul kişisel hijyen alışkanlıkları vardır Yalnızca ...
FrustratedWithFormsDesigner

Hepinizin kokuları burada listelemesini istememiştim. Belki bir listeye link?
C. Ross,

Ross Üzgünüm, bunun farkında değildim. Birkaç deneyim daha ekledim.
Amir Rezaei

@Amir Rezaei sizinkilerin en iyisidir, en azından listenizi bir postada birleştirdiniz.
C. Ross,

Yanıtlar:


33
  • Çok Katmanlı Mimari Katmanlardaki Katmanlardaki Katmanlar olduğunda, uygulamanızdaki noktayı görürsünüz. Ben buna Katmanlı Mimari denir.
  • Bu şekilde soyutlamada kodda kaybolursunuz.
  • Fütüristik Mimari Bu çözüm çok fütüristik olduğunda olur. Gerçekte kimse yeni gereksinimleri öngöremez. Bu nedenle fütüristik uygulamanın çoğu zaman ve kaynak kaybıdır.
  • Teknoloji Hevesli Mimari Mimar yeni teknolojiyi beğendi ve üretime geçti. Daha önce kanıtlanmış olup olmadığını bilmeden.
  • Öldürme Mimarisi Üzerine Basit bir problem, üstel mimarlık becerileri ve teknolojisi faktörü ile çözüldü.
  • Bulut Mimarisi Bulut mimarisi olarak adlandırıyorum çünkü mimarinin gerçekte bağlantısı yok. Sadece güzel Visio diyagramları.

Bunun tam tersi de geçerlidir.

İşte En İyi On Yazılım Mimarisi Yanlışlığının linki .


1
Buna katılıyorum, absürd katmanlı uygulama (9 kata kadar)

7
Baklava mimarisi?
Andrew Arnold

15
ah, spagetti koduna yakın olan, bu 'Lazanya Kodu' olarak adlandırmayı seviyorum
GSto

6
Ooh @GSto - Lazanya mimarisinde spagetti kodu. Tüm topluluk "küçük İtalya" olarak adlandırılabilir.
glenatron

2
Bazı yerlerde application_layers == (developers_assigned - 1) çünkü biri PM olur.
sal

20

Herşey Yapılandırılabilir . Bir mimar size, sistemin geniş kapsamlı yapılandırılabilirlik nedeniyle değişime dayanıklı olduğunu ya da çok özelleştirilebilir olduğunu söylediğinde, bu bir mimari kokusudur.

Sorun şu ki, şu anda yapılandırılması gerekeceğini düşündüğünüz şey için yalnızca yapılandırma mekanizmaları sağlayabileceğinizden, ancak uygulamanız vahşi olduğunda, yeterli olmayacaktır. Ardından, yapılandırma mekanizmaları genişler ve genişler ve sonunda İç Platform Etkisi'ni alırsınız.

Ve sonra yazılım cehennemdesin.


İlginçtir ki, İç Platform Etkisi cehennemdir ve henüz pek çok insan DSL odaklı geliştirmeye, tasarımın biraz içsel bir platformu olan Next Big Thing olarak bakıyor.
glenatron

@glenatron: Belki de nokta budur? Neden sadece havluyu atıp neden olacağını varsaymıyorsunuz. Ardından, DSL ile geliştirebilir ve daha fazla yapılandırma ile başa çıkmak için uygulamayı değiştirebilirsiniz.
Jeremy Heiler

DSL'in DSL'in yaptığı gibi olduğunu söyleyebilirim. Bu iyi yollar ve uygulamak için kötü yollar. Nasıl yapıldığını düşündüğümde, Ruby on Rails'i oluşturan birçok DSL'yi düşünüyorum. Kendi dillerini uygulamıyorlar - sadece bir Ruby programının içindeki yapılarıdırlar, ancak dillerinin ne olduğuna dair ayrıntılarını zekice ve yararlı bir şekilde soyutlarlar. IPE'nin gerçekten cennete kokmaya başladığı nokta, Etki Alanına Özel Dil'den, uygulandığı dile çok benzemeye Başlayan Artan Genelleştirilmiş Dil'e geçtiğiniz zamandır.
Adam Crossland,

DSL'in son zamanlarda DSL hakkında okuyordum, Jetbrains MPS'lerinde ilginç görünüyor, ancak henüz kullanmayı düşünemiyorum. Bazı ürünlerinde kullandığını iddia ediyorlar, bu yüzden hangilerinin ve nasıl olduğunu görmek isteyebilirim.
Ian,

Yapabilseydim bunu 100,000,000 kez fazla oylardım. Clarity adlı proje yönetimi aracını daha önce kullandıysanız, bunun neden korkunç bir mimari seçim olduğunu anlarsınız!
HLGEM

9

Bir ORM tarafından tasarlanan bir veritabanı! Veya ilişkisel olması gereken ilişkisel olmayan bir veritabanı arka ucu. Veya görünümleri çağıran görünümleri çağıran görünümleri kullanmak için tasarladığınız bir veritabanı, yalnızca çok yavaş değiller (veritabanları daha sonra baştan başlayarak performans için tasarlanmalıdır), ancak değişiklik yapmanız gerektiğinde, izlemek için korkunç olurlar. (@AmirResaei'nin söylediği gibi aşırı soyutlama, tüm bu katmanların altındaki bir şeyi düzeltmeniz gerektiğinde kodda kaybolmanızı kolaylaştırır.)


Bu öldü. Ne yazık ki, donanım hızlandıkça daha büyük bir sorun haline geliyor. 10 kayıtta hızlı çalışıyor, neden 100,000,000 ile çalışmıyor?
Jeff Davis

4
Bana göre ORM, mimari kokudur.
Christopher Mahan

3

Kod kokuları ve mimari kokuları aynı ve aynıdır. Kod, optimal olmayan alt yapı nedeniyle "koklamaya" başlar.

Martin Fowler'in Refactoring konulu kitabında, bir dizi Kod Kokusu sunuyor ve bunları sisteminizden çıkarmanın yolunu belirliyor. Joshua Kerievsky'nin Desenlere Yeniden Düzenlenmesi, çeşitli kod kokularını düzeltmek için özel mimari desenler vererek bu fikri daha da vurguluyor (ve onlara nasıl adım adım yeniden bakacakları ).

Çoğu yeniden düzenleme, alt yapı kodunu gelişmiş mimari aracılığıyla azaltmak için yapılır. Doğal olarak doğan tek "Mimari Koku" nun (Büyük Çamur Topu hariç) BDUF (Önden Büyük Tasarım) Mimarisi olduğu söylenebilir. İlk kod satırı yazılmadan önce ihtiyacınız olan her şeyi barındırmaya çalıştığınız yer. Tasarımın gerektiği gibi yapıldığı çevik bir yazılım projesi ( kodun tasarım olarak kabul edilmesine neden olsa bile ) mimarisinin organik olarak büyümesini sağlayacak.


1
İlginç olan, bir örnek verebilir misiniz?
Travis Christian

Akıllı kodlama kod kokusudur.
Christopher Mahan

Gerçekleri desteklemeyen bir açıklama yapan bir cevap. Cevap kokusu?
Evan Plaice,

@EvanPlaice Özür dilerim. Umarım düzenlemem cevabımı nasıl elde ettiğime dair daha fazla fikir verir.
Michael Brown,

@MikeBrown +1 Meraklı ama güzel bir gelişme oldu.
Evan Plaice

2

( Birçoğu ) Bağlanma - her ne şekilde olursa olsun - mimarileri koklayan şeydir. Ne kadar çok bağlanırsa o kadar kokar.

Bununla birlikte, hiçbir bağlantı hiçbir zaman performans sorunlarının kokusunu almaz.


1
Buna katılmıyorum. Eğer iş uygulamaları hakkında konuşuyorsanız, değişmesi muhtemel olmayan bir veritabanına bağlanmak zekice değil. Veritabanına özgü daha fazla performans özelliğini kullanabilirsiniz.
HLGEM

+1 ama YMMV. Dikkatle kullanın.
Michael K,

1
Bu yüzden "hiçbir sıkışmada hiçbir zaman performans sorunları kokmaz" diye ekledim. Performansı artırmak için kuplaj kullanmanız gerektiğine katılıyorum. Her yerde (farklı modüller / sınıflar / uygulamanız ne olursa olsun) çok fazla bağlantı olduğunda, mimari bir problem vardır.
Klaim

2

İşte her zaman karşılaştığım bir somut mimari / tasarım kokusu: işlem ve veri tabanından doğrudan raporlama.

Bu, bazı durumlarda kesinlikle sorun yok (örneğin hafif raporlar), ancak çoğu durumda raporlama ve işlemsel işleme gereksinimleri çakışıyor. Ancak, yapılması kolay / ucuz bir şey olduğu için, raporlar doğrudan işlemsel DB'den çıkarılır. Bu, denklemin her iki tarafında her türlü baş ağrısına neden olur.

Bu genellikle Enterprise LOB uygulamalarında, btw'de görülür. Birçok KOBİ'nin sadece depo ve datamart'lar (küpleri unut ya da haritayı azaltan kurulumlar) yaratacak kaynaklara ya da know-how'a sahip olmadığını, ancak birlikte çalıştığım birçok büyük şirketin aynı sorunları yaşadığını biliyorum.

Bir sistemi tasarlarken, mimar gerçekten raporlamanın - özellikle de analiz raporlarının - ve işlem gereksinimlerinin ayrı ayrı olarak ele alındığını ve sadece veri tabanı düzeyinde toplanmayacağının farkında olmalıdır.


0

Bunun mimari düzeyde doğru bir şekilde uyup uymadığından emin değilim, ancak bir OO tasarımı olması gereken şeyde bir grup yönetici sınıfı / modülü görüyorsam, o zaman mimarlığı / tasarımı anlayacak olan tek kişinin garantisidir. başkaları tarafından çok fazla açıklama / öğrenme olmaksızın mimar / tasarımcıdır.


0

Topluluk tarafından belgelenen birçok mimari koku var. Yaygın olarak meydana gelen bir dizi aşağıdadır.

  • Döngüsel Bağımlılık: Bu koku, iki veya daha fazla mimari bileşen doğrudan veya dolaylı olarak birbirine bağlı olduğunda ortaya çıkar.
  • Kararsız Bağımlılık: Bu koku, bir bileşen kendisinden daha az kararlı olan diğer bileşenlere bağlı olduğunda ortaya çıkar.
  • Tanrı Bileşeni: Bu koku, bir bileşen LOC veya sınıf sayısı bakımından aşırı büyük olduğunda ortaya çıkar.
  • Özellik Konsantrasyonu: Bu koku, bir bileşen birden fazla mimari endişe / özellik gerçekleştirdiğinde ortaya çıkar.
  • Dağınık İşlevsellik: Bu koku, birden fazla bileşenin aynı üst düzey kaygıyı gerçekleştirmekten sorumlu olduğu zaman ortaya çıkar.
  • Yoğun Yapı: Bu koku, bileşenlerin belirli bir yapıya sahip olmayan aşırı ve yoğun bağımlılıklara sahip olması durumunda ortaya çıkar.

Geçenlerde koku taksonomisi hazırladım . Şu anda, 38 mimari koku ve 260'dan fazla toplam kod koku belgeliyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.