Bir mimari açıklama belgesi KURU Prensibinin ihlali midir?


11

KURU Prensibi (Kendinizi Tekrarlamayın) “her bilgi parçasının bir sistem içinde tek, açık, yetkili bir temsile sahip olması gerektiğini” belirtir. Çoğu zaman bu kod anlamına gelir, ancak genellikle belgelere de genişletilir.

Her yazılım sisteminin seçmiş olsanız da olmasanız da bir mimariye sahip olduğu söylenir. Diğer bir deyişle, oluşturduğunuz yazılım bir yapıya sahiptir ve bu "yapılı" yapı yazılımın mimarisidir. Yerleşik bir yazılım sistemi bir mimariyle birlikte geldiğinden, bu sistemin mimari bir tanımını oluşturmak KURU Prensibinin ihlali midir? Sonuçta, mimariyi bilmeniz gerekiyorsa, o zaman her zaman koda bakabilirsiniz ...


Aslında koda bakarak mimariyi ayırt edebileceğinize inanıyor musunuz? Kod size tüm işlevsel ve işlevsel olmayan gereksinimleri, mimari ödünleşmeleri, dağıtım sorunlarını, iş bağlamını, kullanım senaryolarını vb. Söyleyecektir. Eğer kodu gerçekten GERÇEKTEN söyleyebilirseniz, bu önemsiz bir sistemin cehennemidir.
luis.espinal

@ luis.espinal, Statik ve dinamik yapıları sırasıyla koddan ve çalışan sistemden ayırt etmek mümkündür. Bu yapıların bir sistemin mimarisine eşdeğer olup olmadığı düşünce okulunuza bağlı olacaktır. Belirttiğiniz gibi, tasarım kararlarının ardındaki mimari sürücüler ve mantık da dahil olmak üzere bazı büyük parçaları kaçırmaya devam edersiniz.
Michael

Hangi gerçek düşünce okulu, koddan türetilen yapıları bir sistemin mimarisine eşittir? Herhangi bir mimari sürücü de dahil olmak üzere bazı büyük parçaları özleyeceğimizi bilersek, tüm mimariyi kaçırıyoruz. Bu, sadece koddan ayırt edilebilen statik ve dinamik yapıların bir mimarinin tamamını (düşünce okulundan bağımsız olarak) temsil etmediğini önemsiz bir şekilde kanıtlar. Sistemlerin ve yazılım mimarisinin (yani SEI'ler veya INCOSE'ler), bu kodun bir mimarinin sadece bir kısmı olduğu açıktır.
luis.espinal

konuşma konusu olan mesele. Bir sistemin mimarisi, harici arayüzlerin belirli bir sırada kapatılıp açılmasıyla belirli sayıda makineye konuşlandırmamı gerektirebilir. Yalnızca koddan türetilen statik ve dinamik yapılar bunu hiç yakalayamaz (eğer hiç değilse) Açıkçası, ancak bunlar bir sistem mimarisinin konuşlandırılması ve operasyonel yönlerinin bir parçasıdır. Ve koddan türetilen herhangi bir yapı, yalnızca bir yazılım uygulaması (veya bileşen) mimarisinin statik yönlerinin gerçekleştirilmesiyle ilgilidir . Asla bir sistem mimarisi için olamaz .
luis.espinal

1
@ luis.espinal, sizi bu soruya cevap göndermeye davet ediyorum! Bu konuya gerçek bir değer katacağını düşündüğüm mükemmel bir bakış açısı getirdiğiniz anlaşılıyor. Bu konuda koroya vaaz veriyorsun, neden herkesin faydalanabilmesi için düşüncelerini tam olarak açıklayan bir cevap oluşturmuyorsun? Bu yüzden soruyu en başta sordum.
Michael

Yanıtlar:


11

Düşüncelerinizi koda kopyalamak KURU ilkesini ihlal ediyor mu?

Tanrım, mimariyi koda bakarak tanıyabilirseniz, ilk etapta "mimari açıklama belgeleri" diye bir şey olmazdı. Bu bir tekrar değil, koddan önemsiz bir şekilde çıkarılamayan başka bir sistem açıklaması seviyesi . Bu yüzden, KURU kucaklasanız bile var olma hakkı vardır.


7

DRY'yi zor ve hızlı bir kural olarak almayın. Bu iyi bir şey, ama sadece pratikte yaklaşık olarak tahmin edebilirsiniz.

Ayrıca iyi yazılmış olmadığını düşünüyorum. "Kendinizi tekrarlamayın", anlamsal veya işlevsel bir değişiklik yapmak için kaynak metni birden fazla yerde, farklı ama koordineli şeyler söyleyerek düzenlemek zorunda kalacağınız kadar önemli bir durumu kapsamıyor gibi görünmüyor.

İhlal edilmeyecek bir emir olarak almak yerine, bunun neden iyi bir fikir olduğunu anlamak ve bu konuda mantıklı seçimler yapmak daha iyidir. Birden fazla yerde koordineli düzenlemeler yapmanın kötü olmasının nedeni, editör olarak hata yapmanızdır. Değişiklikleri hatasız yapmak için% 100 güvenilir değilsiniz. 10 farklı kaynak metin değişikliği yapmanız gerekiyorsa ve bunlardan sadece 9 tanesini doğru alıyorsanız, bir hata yaparsınız . Bu nedenle, koordine edilen değişikliklerin sayısını en aza indirgemek için kaynak metni düzenlemek iyi bir şeydir. Hataları en aza indirir.

DRY'nin emirlerden biri olduğu bir dine ait değiliz. Biraz yanıltıcı olsa da, bazı sağduyu kapsüllemek için kullanışlı bir yoldur.


4

Mimari Açıklama veya Yazılım Tasarım Açıklaması DRY'yi ihlal ediyor. Bununla birlikte, projelerin geçen yıl, geliştiricilerin gelip gittiği ve sistemin herhangi bir kişinin tüm detayları kafasında tutamayacağı kadar büyük olduğu büyük bir organizasyonda, kritik bir belgedir. Senkronize olmasını sağlamak için gereken "tekrar" miktarı, bir sonraki güncelleme veya bakım sırasında kaydettiği çaba için tamamen buna değer.


1
Bu DRY'nin yanlış anlaşılması veya kör uygulamasıdır. Mimari bir açıklama bunun ihlali değildir. Eğer kişi bu şekilde DRY'yi körü körüne uygulayacak olsaydı, o zaman koddan başka bir şey onun ihlalidir ... ve açıkça bu fikri ortaya çıkaranların niyeti değildi.
luis.espinal

2

Bir mimari açıklama KURU ilkesini ihlal etmez.

Yazılım sisteminiz elbette bir mimari ile geliyor. Ve birçok sınıfta, birçok sınıfta, bir bakış için gereksiz olan birçok yabancı ve ayrıntı ile yayılır.

Mimari belgeniz bir haber raporunun ilk paragrafı gibi olmalıdır: bu bir taslak, özet, projenin yol haritasıdır.


1

Belgeyi tarihlendirirseniz, yazı yazıldığı sırada mimariyi tanımlar.

Oysa kod şu anda mimariyi temsil ediyor.

İki ayrı şey - aynı bilgi değil.

Belgenin yazma sırasında mimariyi temsil ettiğini belirttiğiniz sürece, bilgi IMO'sunu çoğaltmıyorsunuz çünkü farklı bilgileri, sistemle ilgili başka bir noktada ise.


Kod asla mimariyi temsil etmez. Bu sadece mimarinin bir tezahürüdür. Bugün değiştirilen kod, dünkü mimariyi hala temsil edebilir. Ayrıca, en çok endişelenmeniz gereken amaçlanan (veya sözleşmeye bağlı olarak gerekli) mimariyi temsil etmeyebilir. Kod size doğru ya da yanlış olduğunu söylemez, sadece çalışır. Doğru ya da yanlış olup olmadığını bilmek için, amaçlanan mimariye ve sistemi başlamak için gerekliliklere bakmalısınız .
luis.espinal
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.