Patterns.dev
(patterns.dev)- Patterns.dev, JavaScript ve modern framework'lere odaklanan bir öğrenme içeriği sunan, web uygulaması tasarımı ve performans optimizasyonu desenlerini ele alan ücretsiz bir çevrimiçi kaynaktır.
- Vanilla JavaScript, React, Vue için ayrı ayrı tasarlanmış tasarım desenleriyle render etme, yükleme ve performans iyileştirme tekniklerini sistematik olarak düzenler.
- Kod yeniden kullanımı, durum yönetimi, render stratejileri, paketleme optimizasyonu gibi pratik örnekler ve CodeSandbox üzerinde çalışma ortamı desteklenir.
- Tasarım desenleri birer kural değil, başvuru araçlarıdır; tekrarlayan sorun çözümünde ve kod ortaklıklarını anlamada yardımcı olacak şekilde sunulmuştur.
- En yeni ES2017+ sözdizimi ve React Hooks tabanlı uygulamalar dahil olmak üzere, büyük ölçekli web uygulamalarının yapısal ölçeklenebilirliği ve performans artışına odaklanan materyaller bulunur.
Genel Bakış
- Patterns.dev, web uygulaması mimarisini iyileştirmeye yönelik ücretsiz bir çevrimiçi kaynak olup tasarım, render etme ve performans desenleri etrafında yapılandırılmıştır.
- Vanilla JavaScript, React, Vue.js ortamlarında örnek uygulamalarla birlikte her desenin amacı ve kullanım biçimi açıklanır.
- eBook ya da PDF indirme ve çevrimiçi görüntüleme özelliği sunar.
JavaScript Desenleri
- Temel JavaScript ve Node.js odaklı bir desen koleksiyonu sunar.
- Singleton, Proxy, Prototype, Observer, Module, Mixin, Mediator, Flyweight, Factory gibi geleneksel tasarım desenlerini içerir.
- Performans ve yükleme optimizasyonu desenleri de bolca yer alır.
- Dynamic Import, Route-based Splitting, Tree Shaking, Prefetch, Preload, PRPL, Üçüncü taraf optimizasyonu vb.
- View Transitions API ile sayfa geçiş animasyonları, liste sanallaştırma ve kod sıkıştırma gibi yeni tarayıcı özelliklerini kullanır.
React Desenleri
- React ve Next.js tabanlı yapısal desenler ile render stratejileri sunar.
- Container/Presentational, HOC, Render Props, Hooks, Compound gibi yapı desenlerini içerir.
- Render yöntemlerinin karşılaştırması
- Client-side, Server-side, Static, Incremental Static Generation, Progressive Hydration, Streaming SSR
- React Server Components ve Next.js Core Web Vitals optimizasyonu ile ilgili rehber sağlar.
- React Stack Patterns (2025/2026) belgesinde frameworkler, build araçları, routing, durum yönetimi ve yapay zeka entegrasyonu gibi güncel teknoloji yığınları ele alınır.
Vue Desenleri
- Vue.js'e özel desenler ile bileşen yapısı ve durum yönetimine odaklanır.
- Components, Async Components, Composables, Container/Presentational, Data Provider, Dynamic Components
- Composition API ve
<script setup>sözdizimini kullanarak modern kod yapısı sunar.- Provide/Inject, Renderless Components, Render Functions
- Modern Vue uygulamalar için Performans Desenleri.
Desen Uygulama Felsefesi
- Patterns.dev, desenleri zorunlu kurallar değil, başvuru araçları olarak sunar.
- Tekrarlayan sorunları çözmek için ortak çözümler sunsa da her duruma zorunlu olarak uygulanmaz.
- Tasarım desenlerinin amacı, kod problemlerinin ortak yönlerini insan tarafından kolayca anlaşılır hale getirmektir.
- Dil ve framework'e özel desenlerin önemini vurgulayarak, klasik GoF desenlerinin ötesine geçen modern bir bakış açısı sunar.
Öğrenme ve Uygulama Desteği
- CodeSandbox pratik örnekleri ile her desenin gerçek dünyadaki uygulaması doğrulanabilir.
- Görsel animasyonlu materyaller ile kavramların anlaşılması desteklenir.
- Web performans desenleri aracılığıyla kod yükleme verimliliği ve kullanıcı deneyimini iyileştirme yöntemleri sunar.
Temel Özellik Özeti
- ES2017+ sözdizimi tabanlı implementasyon ile en yeni JavaScript ortamlarına optimize edilmiştir.
- React geliştiricileri odaklı optimizasyon ve web performans iyileştirmeye öncelik verilir.
- Tasarım desenlerinin modern yorumuyla karmaşıklıktan çok kullanılabilirlik öne çıkar.
- Büyük ölçekli web uygulamalarının ölçeklenebilirliği ve performansını artırmaya yönelik pratik bir kılavuz sunar.
1 yorum
Hacker News yorumları
Önceki iş yerimde .NET kurumsal uygulamaları geliştirirken tasarım kalıpları gerçekten çok faydalıydı
Birden fazla ekip aynı kalıpları kullandığı için kod tanıdıktı ve yeni projeler de tutarlı bir yapıya sahipti
Ama şimdi 10 yılı aşkın bir JS uygulamasıyla uğraşıyorum ve Java EE tarzı getter/setter aşırı kullanımı ile karmaşık factory yapıları yüzünden bunun zararlı olduğunu görüyorum
Kalıpları neden kullandığını anlamadan aşırıya kaçınca, sonuç basitçe okunabilir koddan çok daha kötü oluyor (YAGNI ilkesini hatırlatıyor)
Bir geliştirici er ya da geç Adapter, Builder, Iterator gibi yapıları doğal olarak aklına getirecektir
Tasarım kalıplarının gerçek değeri, bu keşfedilmiş kalıplara ortak bir dil kazandırarak insanların kolay iletişim kurmasını sağlamasında yatıyor
C, Go, JavaScript gibi daha sade dillerde bunlar çok daha basit çözülebilir
Bu, dilin felsefesiyle uyuşmuyor
Başta temiz görünüyor ama zamanla mantık dağılıyor ve yeni gereksinimler gelince kalıp kolayca bozuluyor
Sonunda insan basit bir switch ifadesini özlüyor
Bu, sadece küçük uygulamalar yapan biriyle gökdelen inşa eden birinin bakış açısı farkı gibi
Eskiden Yahoo Design Pattern Library vardı
UX kalıpları odaklıydı ve kullanıcı davranışını yönlendiren (ör. puan verme) çeşitli örnekleri iyi derlemişti
orijinal bağlantı / web arşivi
90'dan fazla tasarım sisteminin UI bileşenlerini toplayan bir depo ve a11y/ARIA yönergelerini öğrenmek için de iyi
component.gallery
Ortak dil üretkenliği artırdı
Güzel bir kaynak derlemesi, yer imlerime ekledim
Benzer siteleri de paylaşıyorum
Ward Cunningham'ın vikiyi bu amaç için oluşturduğu söyleniyor c2.com/ppr
Deneyim arttıkça tasarım kalıplarına bağımlılık azalıyor
Junior geliştiriciler kalıpları öğrenmenin kariyerde kestirme yol olduğunu sanıyor ama çoğu zaman karmaşıklığı artırıyor
Gerçekten önemli olan şey problemin özünü ve veri yapılarını anlamak
Örneğin iki dizinin ortak öğelerini bulurken HashMap kullanarak O(n) seviyesine inmek çok daha faydalı basit bir kalıp
Bunun bir adı yok ama pratikte her gün kullanılan temel bir kalıp
Sonuçta önemli olan ilke ve bağlam, ders kitabı biçimi değil
“Singleton yaptım” dendiğinde hemen ne olduğu anlaşılıyor
Ama aracı kutsallaştırmak problemli
Postgres sorgu planlayıcısında da görülebilir
Ama koda ad verirken açıklayıcı olmak daha iyi
Leetcode çalışırken öğrenmek faydalı olur
Teknik kalıpların yanında organizasyonel kalıpları da ele alan bir kitap olarak
Organisational Patterns (James Coplien, Neil Harrison) öneriliyor
özet bağlantısı
Üniversite yıllarında tesadüfen Ralph Johnson'ın bizzat verdiği bir kalıplar dersi almıştım,
hayatımdaki en faydalı derslerden biriydi
Ralph Johnson vikisi
“Design Patterns are a sign of missing language features” diye bir söz var
Yani dil yeterince ifade gücüne sahip olsaydı belki de kalıplara ihtiyaç kalmazdı
İlgili kaynaklar: C2 Wiki, Norvig makalesi, Medium yazısı
Bu site iyi düzenlenmiş bir eğitim derlemesi ama Christopher Alexander'ın 『A Pattern Language』 kitabındaki gibi
kalıplar arasındaki hiyerarşik bağlantı yapısını göstermemesi biraz eksik kalıyor
Aslında kalıplar üst-alt ilişkileri içinde anlam kazanır ama teknik kitaplarda bu bağlam eksik oluyor
Her kalıbın hangi problemi çözdüğünün de daha açık gösterilmesi iyi olurdu
Örneğin “Short Passages”, “Flow Through Rooms”, “Building Thoroughfare” gibi kalıplarla bağlantılı
Kalıp dilinin gerçek gücü de bu yapıda yatıyor
Kalıplar aşırı kullanılırsa yavaş ve bakımı zor kod ortaya çıkar
Var olmayan problemleri önceden çözmeye çalışınca gereksiz karmaşıklık oluşur
POSD(Principles of Software Design) açısından faydalı kalıplar şunlar
Buna karşılık Singleton, Mixin, Observer gibi kalıplar karmaşıklık artışı veya global state bağımlılığı yaratabildiği için dikkatli kullanılmalı
Bu site derinlikten çok genişliğe odaklandığı için 2017 hissi veriyor
Asıl önemli olan immutable data ile çalışmanın temelini öğrenmek
for döngüsü olmadan yalnızca array metodlarıyla kod yazma pratiği çok yardımcı oluyor
JS'de
Object.freezeile bir yere kadar gidilebiliyor, ramdajs gibi yeni nesne döndüren yaklaşım daha gerçekçiJS'in modern söz dizimi sayesinde bugün ramdajs'in yalnızca bazı fonksiyonları hâlâ faydalı