Örüntü tabanlı programlama nedir?


16

Birisi programlamadaki saplantılar ve anti-kalıplarla takıntıyı açıklayabilir mi? Soruyorum çünkü kalıplardan herhangi birinin ne anlama geldiğine dair hiçbir fikrim yok. Bir programlama göreviyle karşı karşıya kaldığımda sorunu biraz düşünüyorum, alakalı olacağını düşündüğüm bazı veri yapılarını yazın, bir çözümü prototipleyin, bazı modülleri ayırın ve tekrarlayın. Sürecin hiçbir yerinde "Oh, burada FunkyLookyTastic desenine ihtiyacım yok" diye düşünmüyorum.


12
Desen takıntısı bir şekilde bir anti-kalıptır
Anto

1
Son noktada, kısmen katılıyorum. İsimlendireceğim bazı desenler var, ancak bazı ders kitabı desenleri birbirinin küçük varyantları gibi görünüyor ve ilginç olan bit, genellikle deseni zaten özel duruma uyacak şekilde nasıl ayarladığınızdır, bu yüzden kesinlikle şeyler hakkında dogmatik olmamalısınız.
Steve314

1
Dinamik bir dilde mi programlama yapıyorsunuz? İnsanların atıfta bulunduğu kalıpların çoğu, Java'daki sınırlamaları aşmanın yoludur.
johncip

Ayrıca, her sorunun ayrı ayrı ele alınması takım boyutuna göre ölçeklenmez. Örneğin, bir MVC çerçevesi ile modeller genellikle normalleştirilir, ancak görünümler türetilmiş verilerle ilgilenebilir. Bununla başa çıkmanın birkaç yolu vardır, ancak insanlar her karşılaştığında bu sorunu (potansiyel olarak farklı) çözmemelidir. Ve kodu okuyan diğerlerinin, X'in bu durumda, diğerlerinin aksine, nasıl çözüldüğünü bulması gerekmez.
johncip

Yanıtlar:


19

Bir örüntü, ortak bir problem türünün çözümü için ortak bir yaklaşımdır; başka bir şey ve hiçbir şey daha az. Onları tanıyarak ve anlayarak, iyi çalıştığı gösterilen çözüm türüne doğru sizi yönlendirmek, geçmişte karşılaşılan tuzaklardan kaçınmak ve diğerlerini tanıyan terminolojiyi kullanarak çözümü tartışmak için diğer insanların deneyimlerini kullanabilirsiniz. o modeli bilir.

Tabii ki, açıkça bir desen kullanmadan iyi bir çözüm ortaya çıkarabilir ve özel sorununuza gerçekten uymayan bir desen uygulamaya çalışarak eşit derecede iyi bir çözüm üretebilirsiniz. Bence gözlemlediğiniz “takıntı” genel olarak kavramı yeni keşfetmiş insanlardan geliyor ve aslında olduğundan daha güçlü olduğunu düşünüyor. Çoğu insan onları oldukları şey için hızlı bir şekilde tanıyacaktır: sihirli bir kurşun değil, yararlı bir araç.

Öte yandan anti-paternler, kod kalitesini düşürme eğilimi gösteren yaygın olarak gözlenen davranışlardır. Yine, bunlardan bazılarını bilmek ve anlamak yararlıdır, böylece bu tür davranışlardan kaçınabilirsiniz ve başkalarında gözlemlediğinizde (gerekçeli argümanlarla) düzeltmeye çalışabilirsiniz. Bazıları, kalıpların aşırı kullanımını bir anti-kalıp olarak tanımlar.


1
Örneğin, ünlü dörtlü çete nesne yönelimli desenler, yazarların ve temas halinde oldukları insanların deneyimlerinden derlenmiştir. Bazı kalıpların birkaç isme sahip olmasının nedeni - bağımsız olarak yeniden keşfedildi ve birkaç kez adlandırıldı. Çoğu programcı doğal olarak kendi cihazlarına kalan birkaç deseni ve elbette birkaç antipatili yeniden icat edecektir.
Steve314

3
gözlemlediğiniz "takıntı" genellikle kavramı yeni keşfetmiş olan insanlardan gelir - çoğunlukla doğru, IMHO. inanıyorum ki, bir soruna hazır kalıplarla bir soruna yaklaşmanız gerektiğini düşünenler var ... ve çözümünüz bariz kalıpları içermiyorsa, çözümünüz yanlıştır ... kalıpları, nasıl yapıldığını öğrenmek için zaman ayırmalıyız 'kullanılmış yeniden ne zaman ve ne zaman bunları kullanmak için değil - onlar bizim alet kutusunun bir parçasıdır
IAbstract

9

Desenler hem bir yemek kitabındaki programcıların damıtılmış bilgisi hem de programcıların iletişim kurması için yararlı bir yoldur.

Diğer cevapların da belirttiği gibi, kalıplar gerçekten ortak sorunlara ortak çözümlerdir. Avantajı, kodlamaya başlamadan önce genellikle mevcut bir deseni kullanarak daha iyi çözümler elde edebilmeniz veya olası tuzakları keşfedebilmenizdir.

Diğer faydası da kodunuz hakkında birisiyle konuşurken. Desenler, uzun açıklamaları birkaç kelimeye yoğunlaştıran başka bir jargon türüdür. "O zaman fabrika tarafından eklenen bir gözlemcimiz var" ifadesini kalıplara başvurmadan açıklamayı deneyin. Yapabilirsin, ama uzun zaman alıyor.


2
+1 iletişim için. Herkes aynı sayfada olduğunda ve ortak bir sözlüğü olduğunda, günlük rutin çok daha pürüzsüz hale gelir.
Ampt

3

Çoğu geliştirici, gelen herhangi bir yeni paradigma veya metodolojiyi gölgede bırakacak. Tasarım kalıplarını ilk duyduğumda yaptım. Tasarım kalıpları tam olarak isminin önerdiği şeydir: sınıflar oluşturmak, davranışlarını ve etkileşimlerini tahmin edilebilir bir şekilde modellemek için bir tasarım veya şablon

Evlere bir bakın. Bazı benzerlikleri var. Her evde bir oturma odası, mutfak, yatak odası, banyo, tuvalet vardır. Kimse tuvaleti olmayan bir ev inşa edemez, değil mi? Daireler, bunglowlardan farklı bir desene sahiptir. Kalelerin tamamen farklı bir deseni vardır. Giysilerin de desenleri var. Bir ceket ve resmi bir gömlek aynı temel tasarıma sahiptir, ancak farklı davranışları vardır: röportaj için kovboy ceketi giymezsiniz. Benzer şekilde sınıflar ve eylemleri de davranışlarına ve tasarımlarına göre gruplandırılabilir. Davranışlarındaki ortak öğelere bakmak, sınıflar için tasarım kalıpları verir.

Anladığım tasarım desenleri, yalnızca yeniden kullanılabilirlik ve genişletilebilirlik birincil kaygılarsa önemlidir. Küçük uygulamalar oluşturursanız (10 sınıftan az derseniz), bunlara hiç ihtiyacınız olmayabilir. Ancak büyük projeler, özellikle de üzerinde büyük ekipleri olan ve uzun bir bakım ve özellik ekleme döngüsüne sahip olanlar, kesinlikle kalıplara ihtiyaç duyacaktır. Büyük projelerde bile bir seçenek değil.

Kalıplarla ilgili bazı çevrimiçi eğitimlere göz atın. Wikipedia iyi bir makale dizisine sahiptir. Bu site de iyi: http://sourcemaking.com/ . Deneyimli bir programcıysanız, birkaç desenle karşılaştığınızı, hatta belirli bir adla bilmeden kendinize benzer bir şey uyguladığınızı göreceksiniz.

Onları tamamen görmezden gelme! Bunları gelecekte olmasa da gelecekte faydalı bulabilirsiniz. Tasarım Kalıplarına açık bir zihinle yaklaşmanın anahtarı şudur: "Tasarım kalıpları kullanmazsam ne olur?" Desenler "tedavi" anlamına gelmez (bir problemin tedavisi olarak kullanabilirsiniz); bunun yerine, "önleme tedaviden daha iyidir" şeklindedir.

Yine de, onu kullanmak için küçük bir bahane gördüğünüz her yerde ve zamanda desen uygulayan bir saplantıya karşı uyarırdım. Bu problemle, mimarın DP olmadan projenin tam bir felaket olacağına ikna olduğu bir projede karşılaştım. Mühendislerin tasarımdan geçtikleri ve önerdiği birçok desenin "güzel desenlere vay vay bak" göstermekten başka bir faydası olmayacağına işaret eden bir grup toplantısı yaptık. Desenlerin sadece ihtiyaçlara göre kullanıldığı yerlerin sayısını azaltmak için çok inandırıcı ve pazarlık gerekiyordu.


1

Yanıt veren insanlar, normalde düşündüğü gibi "örüntü tabanlı programlama" açısından doğrudur. Yaptığım şeyle daha alakalı bulduğum biraz farklı bir tanımım var ve bir planlama yaklaşımı yerine bir eklenti yaklaşımını tanımlamak için "desen tabanlı programlama" kullanmaya eğilimliyim.

JQuery eklentilerini, bir CMS bulut eklentisini ve e-Ticaret eklentilerini programladığım için, bu perspektiften "desen tabanlı programlama" temel teknolojiye ve hangi kullanım durumlarının var olduğuna bakmak ve istatistiksel olarak en alakalı olanları vurmak anlamına gelir. Özellikle eklentiler, programlama bağlamına iyi uymaları için çok desen tabanlı olmalıdır.

Bununla birlikte, birden çok projede geçerli kullanım durumlarını gördükten SONRA bir model uygulamak en iyisidir, bu nedenle yeniden kullanım için istatistiksel olarak geçerlidir.

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.