Bob Martin tarafından “Temiz Mimari”, tüm mimariler için bir kural mıdır yoksa seçeneklerden yalnızca biri mi?


22

Bob Amca'nın Temiz Mimarlık İlkeleri adlı videodaki kavramları çok beğendim . Fakat bu modelin Özü'ndeki Soyut Fabrika ve Oluşturucu modellerinin bir kombinasyonu gibi olduğunu hissediyorum .

Bu, iyi programlar yazmak için tek yol değil, tek yoldur.

Raylar ve tepkiler, bu tür temiz mimariyi desteklemeyen akla gelen 2 çerçevedir. Rails, iş mantığınızın modellerde ( FatModels ve SkinnyControllers ) olmasını ve bileşenlerin içinde tepki vermesini bekler . Her iki yaklaşım da, iş mantığını ve çerçeve kodunu sıkıca birbirine bağlar .

3 yoldan hiçbirinde yanlış bir şey bulamıyorum. Herhangi birini seçmek için bir yargılama çağrısıdır.

Ancak videoda temiz mimarinin iş mantığı ve çerçeveler arasında açık bir sınır olması gerektiğini düşündüğünü düşünüyorum. Çerçeveler (web, android, vb) eklentileri olması gerektiğini fiş için iş mantığına. Hatta videoda rayları bile alay ediyor.

Öyleyse, Bob Martin tarafından "Temiz Mimari" tüm mimariler için bir kural mıdır yoksa seçeneklerden yalnızca biri mi?


16
"Temiz Mimari" Bob Martin'in icat ettiği bir şey. Bu kadar.
Robert Harvey,

2
Belki de daha iyi bir soru şudur: Raylar ve Tepki çılgınca başarılı. Bob Martin, Temiz Mimarisini kullanarak karşılaştırmak için ne yazdı? Cevabı kendim bilmek istiyorum.
user949300

4
Joel'in beş dünya hakkındaki blog gönderisini okuyun ve neden “tüm mimariler için bir kural yoktur” olduğunu biliyorsunuz.
Doktor Brown,

1
Başlatmalar ve prototipleme için raylar çok başarılı olabilir. Diğer 50 geliştiriciyle daha fazla bakım ve geliştirme zamanı geldiğinde - Rails "özgürlük", üst düzey geliştiricilerin mücadele ettiği bir konu haline geldi.
Fabio

Düşüncelerinize eklenmiştir: Baruco 2012
Theraot

Yanıtlar:


34

“Temiz Mimari” iyi ve birçok avantaja sahip olsa da, şunu hatırlamak önemlidir:

  • Temiz Mimari büyük ölçüde Robert C. Martin'in, Soğan Mimarisi tarafından Jeffrey Palermo (2008) ve Altıgen Mimarisi (“Limanlar ve Adaptörler”) gibi Alistair Cockburn ve diğerleri (<2008) tarafından yeniden markalaştırılması ve geliştirilmesidir.

  • Farklı sorunların farklı gereksinimleri vardır. Temiz Mimari ve ilgili yaklaşımlar ayrılma, esneklik ve bağımlılığın tersine çevrilmesini on bire dönüştürür, ancak basitliği feda eder. Bu her zaman iyi bir anlaşma değil.

Bu mimarilerin öncüsü Smalltalk'ın klasik MVC modeli. Bu, modeli kullanıcı arayüzünden ayırır (denetleyici ve görünüm), böylece model UI'ye bağlı değildir. MVP, MVVM,… gibi birçok MVC varyasyonu vardır.

Daha karmaşık sistemler sadece bir kullanıcı arayüzüne sahip değildir, ancak muhtemelen birden fazla kullanıcı arayüzüne sahiptir. Birçok uygulama, bir web uygulaması veya bir mobil uygulama gibi herhangi bir UI tarafından tüketilebilecek bir REST API sunmayı tercih eder. Bu, sunucudaki iş mantığını bu UI'lardan ayırır; böylece sunucu, bu tür uygulamalara erişme umurunda değildir.

Genellikle, sunucu hala veritabanları veya üçüncü taraf sağlayıcılar gibi arka uç servislerine bağlıdır. Bu tamamen iyi ve basit bir katmanlı mimari yol açar.

Altıgen Mimari daha ileri gider ve ön uç ile arka uç arasında bir ayrım yapmayı bırakır. Herhangi bir harici sistem bir giriş (veri kaynağı) veya bir çıkış olabilir. Çekirdek sistemimiz gerekli arayüzleri (portları) tanımlar ve herhangi bir harici sistem için adaptörler yaratırız.

Güçlü ayrıştırma için klasik bir yaklaşım, tüm servislerin paylaşılan bir mesaj veriyolunda olay yayınladığı ve olayları tükettiği hizmet odaklı bir mimaridir (SOA). Benzer bir yaklaşım daha sonra mikro hizmetler tarafından yaygınlaştırıldı.

Bu yaklaşımların hepsinin , sistemi izole olarak test etmeyi kolaylaştırma gibi avantajları vardır (ara yüzleştiği tüm harici sistemleri değiştirerek sahte uygulamalar ile). Bir tür hizmet için (örneğin ikinci bir ödeme işlemcisi ekleyerek) birden fazla uygulama yapmayı veya bir hizmetin uygulanmasını değiştirmeyi (örneğin, bir Oracle veritabanından PostgreSQL'e taşıyarak veya Go'da bir Python hizmetini yeniden yazarak) kolaylaştırırlar. .

Ancak bu mimariler mimarilerin Ferrari'sidir: pahalı ve çoğu insan onlara ihtiyaç duymaz. Temiz Mimarinin vb. İlave esnekliği, daha karmaşık bir maliyete sahiptir. Birçok uygulama ve özellikle de CRUD web protokolleri bundan faydalanmıyor. Değişebilecek şeyleri izole etmek mantıklıdır, örneğin HTML oluşturmak için şablonlar kullanarak. Değişmesi muhtemel olmayan şeyleri izole etmek daha az mantıklıdır, örneğin destek veritabanı. Değişmesi muhtemel olan içerik ve iş ihtiyaçlarına bağlıdır.

Çerçeveler neyin değişeceğine dair varsayımlarda bulunur. Örneğin, React, bir bileşenin tasarımının ve davranışının birlikte değiştiğini varsaydığı için onları ayırmanın bir anlamı yoktur. Birkaç çerçeve, çerçeveyi değiştirmek isteyebileceğinizi varsaymaktadır. Bu nedenle, çerçeveler bir miktar kilitlenme sunar. Örneğin, Rail'in (çok düşünülmüş!) Aktif Kayıt modeline güvenmesi, veri erişim stratejinizi (genellikle üstün) Havuz modeline değiştirmeyi imkansız hale getirir. Değişim beklentileriniz çerçeveyle eşleşmiyorsa, farklı bir çerçeve kullanmak daha iyi olabilir. Diğer pek çok web çerçevesi veri erişimi hakkında herhangi bir varsayımda bulunmaz.


20
Not: Robert C Martin, şimdiye kadarki En İyi Şey olarak bir şey sunma ve bunun tek mantıklı yaklaşım olduğunu öne sürdüğü bu talihsiz eğilime sahiptir. Genelde tamamen yanlış değil. Ancak, sık sık potansiyel sakıncaları tartışmaktan kaçınıyor ve abartılı olmaya eğilimli. Sonuç olarak, onun tavsiyesi yanıltıcı olma eğilimindedir. Bu nedenle söylediği her şeyi tamamen görmezden gelmek daha iyidir.
amon

2
Böyle bir ifade duymayı seviyorum, çünkü sık sık söylediği her şeyi takip etmeye çalışan insanları kör bir şekilde buluyorum. En azından "bu, genellikle işe yarayan, ancak her zaman dikkatli bir şekilde göz kulak olun" yaklaşımını benimsemeyi kabul
ederse

6
Bu komik, çünkü çözümünün kitaptaki tek çözüm olmadığını vurguladığını hatırlıyorum. Sonra çözümü hakkında daha derinlemesine konuştu. Şahsen, bazı yayınlarını umursamıyorum, ama Temiz Mimari çok iyi okunurdu.
bitsoflogic

2
@ bitsoflogic Bunu bilmek güzel! TBH kitaplarını okumamıştım ve görüşüme, makalelerine ve eserlerini okuyan kişilerin sorularına dayanıyor. Şimdiye kadar, göze çarpan nüanslardan yoksun olduğu başka örnekler gördüm. Bu, Clean Code'un henüz görüşlerini bağlam içine koyamayan küçük geliştiriciler için çok fazla pazarlandığını düşünerek gerçek bir sorun. Temiz Mimari hakkındaki konuşması (bu soru bir kayda dayanıyor) sınırlılıkları tartışmıyor gibi görünüyor. İyi seyirci kitlesi için, onu “otorite” olarak gören herkes için yanıltıcı bir bakış açısı sunar.
08:

1
@ amon Gerçekten, birçok insanın, desenlerin ve mimarilerin çoğu için zaman ve mekan hakkında derinlemesine konuştuğunu görmeyi çok isterim. Genellikle, kodlama dili veya iş gereksinimi nedeniyle belli bir sorunla uğraşmak zorundadırlar, ancak tartışmalar her zaman “nasıl uygulanacağına” odaklanır. Kitaba gelince, kodlama tarihi hakkındaki bilgisi (onu yaşamış olması), olaylara benzersiz bir bakış açısı getirebildi. Bu, görüşmelerde gördüğünüz kitapta çoğunlukla aynı konuyu bulacağınızı düşünüyor.
bitsoflogic

24

Bob Amca'nın Temiz Mimarlık İlkeleri adlı videodaki kavramları çok beğendim. Fakat bu modelin Özü'ndeki Soyut Fabrika ve Oluşturucu modellerinin bir kombinasyonu gibi olduğunu hissediyorum.

Yakınında bile değil.

Buna baktığınızda:

görüntü tanımını buraya girin

Bir nesne grafiğinin tasarımına bakıyorsunuz. Bu neyin ne olduğunu bilir. Bu hikayeden eksik olan, bu nesne grafiğinin nasıl oluştuğu. Üzgünüm ama burada bulamazsın. İnşaattan söz edilmiyor.

Tüm bunları soyut fabrikalar ve inşaatçılar olmadan inşa edebilirsiniz. Biliyorum çünkü ben yaptım . Onlardan kaçınmak için yola çıkmadım bile. Onları seviyorum. Sadece onlara ihtiyacım olmadı. Ben sadece referans geçmeyi kullandım. Bağımlılık Enjeksiyonu bunun için süslü bir terimdir.

Aslında, bu şemada gördüğünüz her şeyi ana olarak inşa edebilirim. Ardından, sadece her şeyi işaretlemeye başlamak için bir nesne üzerinde bir yöntem çağırın.

Şimdi başka şeylere sokabilmeniz için önce bazı şeyler var olmalı. Bunu burada araştırdım ve bu sevimli şemayı verdim:

görüntü tanımını buraya girin

Ve hepsini bile çıkmadan yapabilirsiniz main().

Usul inşaat kodunu bir yığınını güzel ısırık büyüklüğünde kavramsal parçalara bölmek istediğinizde inşaatçılar ve fabrikalar kullanmanızı öneririm. Ancak temiz mimaride ya da sizden talep eden diğer tercüman mimarilerinde hiçbir şey yoktur. Öyleyse buna bağlı kalmak istiyorsan, tamam main(). Sadece lütfen, merhamet et .

Bob Martin tarafından “Temiz Mimari”, tüm mimariler için bir kural mıdır yoksa seçeneklerden yalnızca biri mi?

Clean Architecture'ı, insanları bir blog ve kitaba yönlendirmek için kullanılan bir terim olarak görüyorum. Bu blog ve kitabın, insanları eski bloglara ve eski kitaplara yönlendirmek için kullanılan eski isimlere sahip olan çok eski Mimarlar hakkında çok iyi açıklamaları var. Limanlar ve Adaptörler gibi özel olarak Soğan. Bunlardan hiçbiri sahip olduğunuz tek mimari seçenek değil.

Bob Amca'yı seviyorum çünkü harika bir konuşmacı ve yazar. Aksi takdirde sahip olamayacağım şeyleri düşündürüyor. Ama bunun sizi her şeyin yolunda gitmesi konusunda ısrar eden dini bir zihniyete dönüştürmesine izin verirseniz, güncelleme belgelerinin koduma en yakın şekilde girmenize en yakın olduğunu hemen anlayacaksınız.

Buzzword mimarileri, dünyayı değiştirirken devam etmesi gereken uzun ömürlü bir kodunuz olduğunda kullanışlıdır. İşte o zaman parlar. Eğer dünya kodla kıyaslandığında istikrarlıysa, sebepsiz yere bir şey yapmaktan hoşlanırsın.

Bir şey ne kadar harika görünürse görünsün, onu saçma yapabilecek bir bağlam vardır. Üzgünüm, bu da gümüş mermi değil.

Ancak videoda temiz mimarinin iş mantığı ve çerçeveler arasında net bir sınırın olması gerektiğini düşündüğünü düşünüyorum. Altyapılar (web, android, vb.) İş mantığına bağlanan eklentiler olmalıdır. Hatta videoda rayları bile alay ediyor.

Haklısın. O yapıyor. Bob Amca, çerçevelerin kütüphaneler gibi ele alınabileceğini düşünüyor. Ve yapabilirler. Ama bu kararın bile sana bir maliyeti var.

Bay Martin'in korumaya çalıştığı şey, genel amaçlı dilin hala genel olduğu bir alandır. Her yere bir çerçeve yayarken vazgeçersiniz. Bunu yaptığınızda, dilinizi etki alanına özgü dil denilen bir şeye dönüştürmek yolunda ilerliyorsunuz. HTML, alana özel bir dildir. İşini çok iyi yapıyor ama yapamayacağı başka işler var.

İhtiyaçlarınız çerçeve tarafından öngörüldüğü sürece, işler çok sorunsuz olacak. İhtiyaçlarınızı önceden tahmin etmeniz güzel. Seni işleri basit tutan bir kutuya koyuyor. Sadece bunu almak için neyi bıraktığınızı anlayın. Spring'i her yere yayarsanız, artık bir Java işi olarak reklamını yapamazsınız. Bu bir Java / Spring işi. Ruby ve Rails için de aynı şeyi söyleyebilirim ama Rails uzun zaman önce Ruby'nin öğle yemeğini yedi.


4

Videoyu alıntılamak için:

"SQL'de posta birleştirme yapmak istemiyorsunuz."

bunu takiben:

"Aslında tam bir adres mektup birleştirme olan bir SQL saklı yordam gördüm"

Adres mektup birleştirme gibi mimarlık da birçok seçenek arasında sadece bir seçenek.

İsteğe bağlı olmayan, mimarinin çözmeye çalıştığı problemlerdir.

SQL adres mektup birleştirme işleminin diğer çözümlere neden olduğu sorunları anlarsanız, mimari seçiminiz size bildirilir ve 'kötü' çözümler seçmek zorunda kalsanız bile, eksikliklerin farkına varacaksınız.

Bir mimari tarzı tam olarak düşünülmüş olduğu için izlerseniz, o zaman hata yapmanız ve aynı problemlerle karşılaşmanız olasıdır.



1

Temiz Mimari, bir çok ortak semptom yazılım geliştirme organizasyonunun sık sık kullanım ömrü boyunca karmaşık uygulamalar boyunca karşılaşacakları bir dizi ilke ve kalıptır. Bay Martin, bu alandaki geniş deneyimlerine dayanan semptomları ve kök nedenleri belirlemek ve bu endişeleri hafifletmek için mimarlığın rolünü netleştirmek için kitapta çok uzun sürüyor.

Ancak, bu bir Kural değildir, ya da tüm hastalıklara karşı her derde deva. Kitabı okursanız, savunduğu ilkeleri ve kalıpları (ve ilgili takasları) nasıl / ne zaman / nasıl uygulayacağınızı daha iyi anlayacaksınız. Kitabı okumadıysanız, eksik bilgilere dayanarak yanlış varsayımlar, başvurular, kararlar ve açıklamalar yapabilirsiniz.


Bu yapılan puan üzerinden sağlam teklif şey gibi görünüyor ve 4 önceki cevapları açıklandığı gelmez
tatarcık
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.