Peki, “Tasarım Kalıpları Dil Özellikleri Eksik mi?” [kapalı]


12

Burada Programcılar'da şu sorunun cevabını gördüm : Tasarım kalıpları ve OOP uygulamaları üzerine düşünme, dinamik ve zayıf yazılan dillerde nasıl değişiyor? Orada açık sözlü başlıklı bir makaleye bir bağlantı buldum: Tasarım Desenleri Dil Özellikleri Eksik mi . Ama burada bana çok akılda kalıcı görünen ve muhtemelen bunun için bir teşvik olduğu göz önüne alındığında deneyime karşı doğrulanabilen parçacıklar buldum:

PaulGraham, "Peter Norvig, Tasarım Desenlerindeki 23 desenden 16'sının Lisp'te" görünmez veya daha basit "olduğunu buldu."

veya JavaScript'te sınıfları simüle etmeye çalışan kişilerle son zamanlarda gördüğümü doğrulayan başka bir cümle:

Tabii ki, hiç kimse "işlev" kalıbından, "sınıf" kalıbından veya birçok dilin yerleşik özellikler olarak sağladığı için aldığımız diğer birçok şeyden bahsetmez. OTOH, programcılar tamamen Prototip OdaklıDil mi? prototiplerle sınıfları simüle etmeyi uygun bulabilir ...

Ayrıca tasarım desenlerinin bir iletişim aracı olduğunu da göz önünde bulunduruyorum . Çünkü uygulama geliştirmeye katılan sınırlı deneyimimde bile, örneğin bir anti-desen ( etkisiz ve / veya karşı ürün e) olarak görebilirim, küçük bir PHP ekibini küçük ila orta intranet Uygulaması için GoF modellerini öğrenmeye zorlar. Ölçek, kapsam ve amacın neyin etkili ve / veya verimli olduğunu belirleyebileceğinin farkındayım, ancak yine de bu konuda teknik bir genel bakış bulamadım.

OOP ile işlevsel olarak karışan ve hala bakımı yapılabilen küçük ticari uygulamalar gördüm ve birçoğunun örneğin bir tekton yazmak için python'a ihtiyacı olup olmadığını bilmiyorum, ama benim için basit bir modül aynı şeyi yapıyor.

Öyleyse, tasarım kalıpları ile geçici çözümlere karşı daha basit yollar veya dil özelliklerine göre değiştirmeler dikkate alan çalışmalar, kapsamlı makaleler veya başka bir açıklama şekli var mı?


16
Paul Graham'ın programlama dilleri konusunda söylediği her şeyi "nesnel ve olgusal" olarak kabul etmek yanlış olur.
Mason Wheeler

5
Paul Graham'la aynı fikirde değilim, ama @MasonWheeler haklı, evangelistler pek çok nedenden ötürü harikadır, ancak nesnelliklerinden dolayı değil.
Jimmy Hoffa

3
@JimmyHoffa: Genel olarak "evangelistler" değil. Graham'ın uzun zamandır kendisiyle ya da kaynaklarıyla çelişen ve her şeyi tutarlı görünmeye bükmeye çalışan saçma malzemeler yayınlama konusundaki uzun geçmişini ele alıyorum. Ne için savunursanız olun, bu korkunç bir yoldur ve insanların onu gerçekten dinlemesi benim için biraz dehşet verici.
Mason Wheeler

5
Bazı çalışmaları görmek güzel olurdu, ancak modern fonksiyonel dilleri kullandıysanız - GOF tasarım desenlerinin ne kadar eski olduğunu zaten biliyorsunuz ve daha fazla kanıtlamak için sayıya gerek yok . (Rağmen, şüphesiz, 1990 yılında önemli idi).
c69

3
@DanielB, her belirli paradigma başarısız olacaktır, çünkü gerçeklik herhangi bir paradigmanın olabileceğinden çok daha karmaşıktır. Bu nedenle, her sorun kendi alan adına özgü modeli ve paradigmasını hak etmektedir.
SK-logic

Yanıtlar:


10

Tüm bunları dikkate alan derinlemesine bir tartışma veya çalışmanın farkında değilim .

Bununla birlikte, "tasarım örüntüleri sadece OO dillerindeki eksik özellikleri yamuyor" argümanı biraz zayıftır. Evet, bazı tasarım kalıpları tam olarak, bazı diğer boşluklarda bile bulunmayan bazı ortak boşlukları dolduruyorlar.

Ancak tasarım kalıpları bu basit olanların çok ötesine geçer ve onlara eksik dil özellikleri demek hayal gücünü uzatır. Fowler'in kurumsal uygulama kalıpları kataloğuna göz atın ve bunların hepsi bir dilin temel tanımının bir parçası olsaydı nasıl olacağını düşünün. Sanırım kurumsal uygulamalar için alan adına özgü bir dil ( DSL ) elde edersiniz (ve bunun için çok karmaşık bir dil ).

İşte bu, gerçekten - tasarım modelleri, belirli sorunlar için (genellikle genel, çok amaçlı bir dilde uygulanan) yeniden kullanılabilir çözümler bulmanın yoludur. Burada iletişim de devreye giriyor. Bana "Aktif Kayıtlar kullanıyoruz" derseniz, çeşitli yaklaşımların ne olduğunu tartışmak için dakikalar harcamaksızın uygulamanız hakkında çok şey biliyorum. Yani evet, tasarım desenleri dil spesifikasyonunda yama delikleri yapıyor. Tüm yaptıkları bu mu? Hayır - uzun bir atışla değil.

Düzenle:

Bir bakıma, diyorum ki, kalıplar OO uygulayıcılarının kendi dilleri sözdiziminde kalırken, daha yüksek bir seviyede düşünmelerine ve ortamları için neredeyse bir tür DSL oluşturmasına izin veriyor . Ve evet, onları her yere uyguladığınızda ne olduğunu gördüm (bkz: AbstractSingletonProxyFactoryBean , evet, var) veya bir çeşit gümüş kurşun olduğunu düşünüyorum. Mesele şu ki, gerçekten rahat olmaları uzun zaman alırken, işleri yüksek bir seviyede öngörülebilir / anlaşılabilir hale getirerek karmaşıklığı azaltmaları gerekiyor. Bu, dilinizin başarısızlığı için bir yama kiti olmaktan çok farklıdır.

Edit 2 - desenlerde biraz eğlenmek için AbstractSingletonProxyFactoryBean karşı örneği eklendi. Tamamen adil olmak gerekirse, bir AOP ışığından bakıldığında, bu karşı örnek bile savunulabilir.


(+1) kullanın ve kabul edin çünkü DSL ve uygulama modellerindeki aramamı daralttınız. Çok düşünceli ve okuyucuyu genişletebilir veya bağlayabilir misiniz belki parantez içinde DSL kısaltmalarından en az biri Etki Alanına Özel Dil anlamına gelir.
Eduard Florinescu

@EduardFlorinescu teşekkürler, DSL bağlantılarıyla güncelledim.
Daniel B


1
@EduardFlorinescu bu çok ilginç, ancak sadece tercüman deseninden bahsetmiyorum; daha ziyade, birçok paternin tamamen alana özgü olabileceğini ve bu alandaki geliştiriciler için neredeyse deyimsel hale gelebileceğini söyledim. Bu anlamda bir çeşit DSL haline geliyorlar ve anlamak ve kullanmak için fazla çaba sarf etmiyorlar. Örneğin, bir komut deseni (etki alanına özgü olmayan bir örnek) üzerinden okuduğumda, hangi kaynaştırma kodunu güvenle yok sayabileceğimi biliyorum ve fazla çaba gerektirmiyor. Ancak yine de ilginç bağlantı için teşekkürler.
Daniel B
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.