Yazılım mimarisi dile ne kadar bağlıdır?


14

Kendimi yazılım mimarisi ve tasarım kalıpları hakkında eğitirken, çoğu durumda açıklamada bazı dil özelliklerinin ve tasarım özelliklerinin ima edildiğini fark ettim.

Örneğin hemen hemen sınıfları ve arayüzleri kullanan fikirleri gösteren herhangi bir makale veya kitap. Kişinin bu konuda kolayca bulabileceği her şey nesnelerden ve OOP kavramlarından bahsedecektir.

Sistemin yazıldığı dilde bu tür kavramlar yoksa ne olur? Örneğin, dinamik olarak yazılan ve arayüz kavramına sahip olmayan Python veya Node kullanırsam ne olur? Arabirimin çalışma zamanında olmayan geçici bir yapı olduğu TypeScript kullanırsam ne olur? İşlevsel programlamayı benimsemeye çalışırsam ne olur? Örn. SOLID'i görmezden gelmeli ve dilime uygun başka kavramlar mı aramalıyım?

Evet ise, bunlar nedir? Ne yazık ki iyi kabul görmüş tüm paradigmalar (bildiğim kadarıyla) bir şekilde OOP kavramlarına ve türlerine atıfta bulunur. Hayır ise, genel mimarlık ve tasarım ilkelerini kendi dilime ve kullanım durumuma uyarlarken hangi kurallara uymalıyım?

Genel olarak mimarlık ve dil arasındaki bağımlılığı nasıl tanımlarsınız?


Yazılım karmaşıklığı yönetme: Ben yazılım mimarisi üzerine bir makale yazdı linkedin.com/pulse/...
overexchange

İlk olarak, evet, yazılım mimarisi aklınızdaki teknolojiye dayanmaktadır. Örneğin: python, bu iş parçacıkları G / Ç bağlı olana kadar çoklu iş parçacığından yararlanmaz. Bu, çok çekirdekli işlemci bağlantılı işlemlerin kullanımında gerçek bir sınırlamadır. İkincisi, bunu dinlemelisiniz ... youtu.be/FF-tKLISfPE Üçüncü olarak, en az 5-6 yıl boyunca, ölçeklenebilir bir şekilde dağıtılan belirli bir alandaki mevcut kararlı dağıtılmış kurumsal ürünleri analiz etmeli / üzerinde çalışmalısınız. Bu, teknolojinin tasarımı nasıl etkilediğine dair organik bir anlayıştır. Btw .. Bu tür ürünler java öncesi dünyada sıfırdan yazılmıştır.
2018'de

Wrt teknolojisi ... Java dünyasında, java 5/6/7 dil tasarımı gerçek kurucuların kontrolü altındaydı. Java 8'den itibaren java'yı bir propaganda makinesi olarak görüyorum, ancak programlama dili olarak görmüyorum. Bence java bir proje yöneticisinin teknolojisi haline geldi. Bu nedenle, yeni başlayan bir kişi olarak, C / C ++ / Python kullanarak yazılmış bir ürünü analiz edeceğim / üzerinde çalışacağım
02:58

Lütfen sorunuzda mimarlık kelimesini kullanmayın, kafa karıştırıcı. Sorunuz tasarımla ilgili. Dil seçimi tipik olarak mimari olarak nitelendirilir, sorunuzun ifade edildiği gibi bir anlamı yoktur ..
Martin Maat 13:18

Javascript Ayrıca piton ve do arayüzlere sahip, sadece ayrı bir anahtar kelime kullanmayın onları ayırmak için
Caleth

Yanıtlar:


11

Yazılım mimarisi, bir evin veya köprünün mimarisine çok benzer. Bir köprü kendi ağırlığını ve üzerinden geçen araçları veya üzerinde yürüyen insanları taşımalıdır. Hava şartlarına dayanmalıdır. İnşa etmek için kullandığınız malzemeler hem güçlü hem de nispeten hafif olmalıdır.

Bir ev inşa etmek için kullanabileceğiniz birçok malzeme var. Tuğla veya sıva kullanabilirsiniz. Ahşap kirişler veya metal kirişler kullanabilirsiniz. Her malzemenin ağırlık, mukavemet vb. Bakımından kendine has özellikleri vardır. Tüm bu özellikler mimariyi etkiler.

Aynı şekilde, kullandığınız programlama dili mimarinizi oluşturma şeklinizi etkiler. Mimariniz C ++ gibi sınıflara sahip bir programlama dilinde, C gibi olmayan bir programlama dilinde olduğundan farklı görünecektir.

SOLID ilkeleri çoğunlukla nesne yönelimli dillerle ilgilidir (yani sınıfları olan diller).


4

Mimarlık, hedeflerine ulaşma yeteneklerine bağlıdır. Dil seçimleri yetenekleri sınırlayabilir. Herhangi bir Turing tam dili, herhangi bir programlama görevini tamamlayabilir. Bu noktadan sonra, dilin insan tarafından okunabilir olması, çözümün olmasına izin verir.

Birçok yazılım mimarisi şeması sizden temel alan iş kurallarından teknoloji seçimleri hakkındaki tüm bilgileri kaldırmanızı ister. Asla bilgisini asla kaldıramayacağınız teknik bir seçim, onu ifade etmeyi seçtiğiniz dildir.

Mimarlık hakkındaki kitaplar size hedeflerini anlatmaya sadık kaldığında, dil hedefe ulaşabilecek kadar önemli değildir. Kitaplar size bu hedeflere nasıl ulaşacağınızı söyleyince dil mater.


Cevabınızdaki güzel noktalar, ancak eminim, tarihsel olarak yazılım mimarisi, trend olan TEKNOLOJİLER ile uygulandı.
2018'de

@overexchange iyi bir mimarinin amacı, bir sonrakine hazır olarak mevcut eğilimi geçebilecek yazılımlar üretmektir.
candied_orange

En azından ara katman yazılımı dünyasında, ürün mimarileri 1990'lara kadar RPC / RMI / CORBA'nın ötesini düşünemedi. Prosedür odaklı remore çağrılarına dayanan klasik tasarımlar gördüm. Ardından ServiceOArch, ara katman yazılımı trendini mimari açıdan değiştirdi.
2018'de

2
@CandiedOrange bu teori. Uygulamada, birçok insanın bazen "yutturmaca güdümlü gelişme" olarak adlandırılan şeyi yaptığını gördüm - sadece tasarım sırasında şu anki akran çevrelerinin en çok konuştuklarını yapın, böylece bu konuşmaya katılabilirsiniz.
marstato

@marstato Kabul etti. En iyi örnek, Spring / Springboot'u mevcut trendde kullanmak, herhangi bir yeni proje için, bilmeden neden?
aşırı değişim

1

Bir terim olarak mimarlık, fiziksel dünyada mimariyle çok ilgili olan ve gerçekten de bir şeyler inşa etme sanatı ve pratiği, şeylerin nasıl yapıldığı ve bir araya getirildiği ile ilgilidir. Bu şekilde ele alındığında, mimari iyi bir şekilde yapıldığında, dilin mimarlıkla çok bağlandığını düşünüyorum, tıpkı iyi tasarlanmış bir yapının, inşa edildiği malzeme tarafından yakından bilgilendirilmesi gerektiği gibi.

Yazılımda mimari seçimler, dilin özelliklerine uygun bir şekilde yapılmalıdır. Nesne yönelimli bir dile sahip bir sistem kuruyorsanız, sistem mimarisinin de nesne yönelimli olmasını beklerdim. İşlevsel bir dili olan bir sistem kuruyorsanız, o sistemin mimarisinin de işlevsel olmasını beklerim.

Mantıklı olmak?


Cevabınız için teşekkürler! dinamik olarak yazılan veya işlevsel dillerle ilgili yazılım mimarisi üzerinde duran herhangi bir kaynağın farkında mısınız? Gördüğüm her şey, örneğin Java için kutudan çıkar çıkmaz çalışır, ancak örneğin js için bazı uyarlamalar gerektirir. ortak mimari kalıpları zayıf yazılan bir dile uyarlamak için olası yönergeler nelerdir? hatta denemek gerekir mi yoksa tamamen farklı mı olmalı?
Tristan Tzara

benim endişem şuydu, eğer birisi Java kullanıyorsa, mimarlık için en iyi uygulamalar ve desenler var, ama farklı tür diller için hiç görmedim. bu yüzden nasıl tedavi edileceğini merak ediyordum
Tristan Tzara

temel olarak, örneğin SOLID hala böyle bir durumda duruyor mu? evet ise nasıl uyarlanır? eğer hayırsa ne yapmalı?
Tristan Tzara

SOLID prensipleri çok nesne yönelimlidir. Bununla birlikte, dilden bağımsız olarak herhangi bir yazılım sistemine uygulanabilecek üst düzey ilkeleri kodladıklarını düşünüyorum. Ancak ilkel ilkeler tam olarak şöyledir: Bir kuş besleyicinin çok ötesine geçmeden önce bunları bilmeli ve anlamalısınız.
RibaldEddie

@TristanTzara Nesneye yönelik programlama, herhangi bir nesneye yönelik dilin öncesinde ve olmadan icat edildi. Bunu herhangi bir genel amaçlı dilde yapabilirsiniz. Sınıfları olmayanlar bile.
candied_orange

1

Başlangıç ​​olarak, düşündüğünüz dilin bile gebe kalabileceğiniz şey üzerinde derin bir etkisi olduğunu söyleyebilirim. PASCAL'in Niklaus Wirth ve C tarafından Brian Kernighan ve Dennis Ritchie tarafından yaratılmasının bir nedeni var.

Daha yüksek bir düzeyde, belirli kavramları (ve başkalarının eksikliğini) ifade etme yeteneği, düşüncelerinizi yönlendirecek ve sizi farklı bir arka plana sahip aynı kişi olmayacak belirli çözümlere ulaşmanızı sağlayacaktır.

Son olarak, bahsettiğiniz kavramların hepsi herhangi bir genel amaçlı dilde uygulanabilir. Sadece sözdizimsel destekleri olmayabilir ve uygulama hantal olabilir. C ile yapabileceğiniz gibi yeterince kararlıysanız (veya yeterince deliyseniz), nesne yönelimli x86 derleme kodu yazabilirsiniz. Aslında, C ++ 'nın ilk uygulamaları C ++ kodunuzu C'ye derleyen ön işlemcilerdi (ve karıştırılmış sembol adları hata ayıklama çok daha eğlenceli).

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.