WordPress Olay Sistemi: Daha geniş bir programlama bağlamında kancaları anlamak
WordPress Hook Sistemi, “olaylar tarafından yönlendirilen” mimarlık veya programlama sistemi örneğidir.WordPress’te çalışıyorsanız, WordPress kancalarını çalışmanızda sık sık kullanabilirsiniz – belki de çoğunlukla yeni işlevleri add_ace () ve add_filter () aracılığıyla işlevselliği değiştirmek için ilişkilendirir.Bugün, bir kanca sisteminin ne olduğu hakkında konuşalım: bir mimari veya “olay odaklı” programlama sistemi örneği.Etkinlikler bilgisayar bilimi dünyasında geniş bir geçmişe sahiptir ve güçlü yönleri ve yükümlülükleri hakkında birçok ders vardır.Burada, olayların yönlendirdiği sistemin önemli fedakarını tartışacağız.Sistemde genel olarak olayların yönlendirdiği daha yüksek seviye bir deseni anlayarak, WordPress geliştiricileri olarak WordPress kanca sistemini daha iyi anlayabilir ve çalışabiliriz.
Olay tabanlı mimari nedir? Genel bir terim olarak “olaylar tarafından yönlendirilen programlamayı” duydum, ancak “olaylar tarafından yönlendirilen mimari” için Wikipedia sayfası, mesaj tabanlı mimari olarak da bilinen olay tabanlı mimari (EDA) için en uygun olanıdır. , üretim, tespit, tüketim ve olaylara tepkiyi teşvik eden bir mimari desen yazılımıdır. Olaylar tarafından yönlendirilen bir sistemde, bir sistem bir “olay” oluşturur ve daha sonra gerektiği kadar diğer sistemler tarafından yanıtlanır. Örneğin, e -posta programı “kullanıcı sadece bir e -posta gönder” etkinliğini tetiklerse, sistemde hiçbir şey yapmak için ayarlanan başka bir şey olmayabilir – ya da onlarca başka sistem dinler ve yanıt olarak çeşitli şeyler yapmaya hazırdır. , “E-posta Metninin Yazdır” veya “E-posta Alıcının Adresini CRM yazılımındaki ‘Surk Kak-Surk’ listesinden kontrol edin” gibi. Hayatınızdaki olaylarla itilen bir ilişki yaratmak hakkında:
Bu gerçek hayat örneği, kodunuzdaki olaylar tarafından yönlendirilen sistem tarafından sağlanan ilişki türüne benzer ve arkasındaki gücü ve sezgiyi görmeye başlayabilirsiniz. Olaylar tarafından yönlendirilen mimari tabanlı sistemin avantajının birkaç ana avantajı vardır. Olay tabanlı sistem, başlangıçta eşit olarak hareket ettirilen bir sistemle oluşturulan davranışı tamamlamak çok kolay olabilir.
Etkinliği tetikleyen kodun etkinliğin nasıl tüketildiği konusunda endişelenmesine gerek olmadığından, WordPress’in (“Ana WordPress” olayı “olayı) çekirdeği, tema ve eklenti kodundan bağımsız olarak kendini güncelleyebilir. Bu ayırma, her ikisinin de kendi hızlarıyla hareket etmesini sağlar-tüm WordPress eklenti ekosisteminin var olmasına izin veren temel faktör. “Zayıf debriyaj” Mülkiyet için, sistemin olaylar tarafından yönlendirilen kısımlarının anahtar adımlarda hareket etmesi gerekmediği bir bilgisayar bilimi var: “Zayıf debriyaj.” Olaylar tarafından yönlendirilen sistemde, etkinliğin göndereni (WordPress’in çekirdeği gibi) ile olay reaktörü (eklenti gibi) arasında zayıf bir ilişki vardır. Zayıf bir debriyajın tersi “güçlü bir debriyaj” dır, Her iki sistemin de aynı anda değişmesi veya her şey kırıldığı yer. (Eminim ki kayıp eklentinin yenilenmesi veya benzeri, bazen WordPress gibi geliyor …) Etkinlikleri yaymak için yazılmış daha büyük kod çok basit görünebilir. Etkinlikleri yaymak için yazılan kod çok basit görünebilir. Bir geliştirici olarak, WordPress kodundaki Apple_Filters ve Do_actions’ı genellikle güvenli bir şekilde görmezden gelebileceğiniz bir işaret olarak işlemeyi öğrendikten sonra, birçok büyük avantaj elde edersiniz. Sistemdeki diğer birçok kod satırı tarafından genişletilebilen, “bağlantılı” veya değiştirilebilen kodun, tüm bu uzantılara uyacak şekilde çok karmaşık olması gerekmez. Aslında, bu basit hale getirilebilir çünkü arayanla birleştirilmez.
Ancak – ve burada olaylar tarafından yönlendirilen sistemin eksikliklerini örtbas etmeye başlıyoruz – görünür hizalama tamamen ücretsiz değil: Kodunuzla etkileşime giren sisteme karmaşıklığı zorlayarak kodunuzu basit tutuyorsunuz. Olaylar tarafından yönlendirilen olaylara dayanan sistemlerin zayıf yönleri birkaç zayıflığa sahiptir. Derin karmaşıklığı gizleyebilen basitlik, önceki noktanın diğer tarafıdır: olay tabanlı sistem, başka bir yere taşınması karmaşıklığı nedeniyle basit görünebilir. Neyse ki, etkinliklere tepki veren (veya “bağlanma”) olayların genellikle çok karmaşık olması gerekmez – ancak deneyimlerime göre, iki yaygın olay bu kodu karmaşıklaştırabilir: Etkinliğiniz ihtiyacınız olan bazı verileri sağlamazsa , o zaman sanki en başından beri elde etmenin bir yolunu bulmalısınız. Bu, kimin neye sahip olduğuna bağlı olarak yinelenen kodlara ve çift çalışmaya neden olabilir.
Zaman tabanlı etkileşim ve akışın kendisi ince sorunlara neden olabilir. Örneğin WordPress’te, WordPress üzerindeki yanlış olayları (eylemleri) “bağlamaya” çalışmak ve yapamayacağınız bir şey yapmak veya son olarak bir şey yapmak mümkündür. Her iki durumda da, kodunuz bir şeye zarar verebilir veya sessizce başarısız olabilir ve neden kendi kodunuzdan açıkça görülmemesinin nedeni, oldukça makul görünecektir. WordPress’te, örneğin, init kancaları ve eklentilerin_loaded eylemleri arasındaki fark çok önemlidir ve mutlaka net değildir.
Olaylar tarafından yönlendirilen sistemdeki karmaşık nedenlerin hata ayıklanması ve izlenmesi, herhangi bir şey belirli olaylara yanıt vererek sistemin durumunu değiştirebilir, böylece olaylar tarafından yönlendirilen sistemin hata ayıklanması çok zordur. Birçok yönden prosedürel kod olaylar tarafından taşınan kodla doğrudan bir kontrasttır, bu da onu net ve açık hale getirir. Dil tercümanının sırasının kodu yürüteceğini biliyorsanız, neyin neden olduğunu öğrenmek ve sistemde hata ayıklamak için ihtiyacınız olan neredeyse her şeyi biliyorsunuz. Genel olarak, adlandırılmış bir işlevi olan prosedürel sistemin gördüğünüz olası davranış nedenleri olan bir alanı çok sınırlıdır. Bu, olaylar tarafından yönlendirilen sistemde doğru değildir. Doğal olaylar tarafından yönlendirilen sistem (tartıştığımız çok ayrılmaz bir seçimle), sistem tam olarak monte edilene kadar monte edilecekleri her şeyi içermediğinden, sistemin tüm detaylarını yalnızca tüm sistemin yürütülmesinde ortaya çıkarırlar. bir arada. Bu, belirli bir şeyin belirli bir koşul olabileceği tüm olası nedenleri izlemenin çok zor olduğu anlamına gelir.
Başka bir deyişle, olaylar tarafından yönlendirilen bir sistemde, herhangi bir şey belirli bir olaya yanıt vererek sistemin durumunu değiştirebilir, böylece olaylar tarafından yönlendirilen sistemin hata ayıklanması çok zordur.Bu karmaşıklık, olaylar tarafından yönlendirilen sisteme hemen hemen dahildir ve genellikle maliyetle orantılıdır.Tabii ki, karmaşıklıkta bir miktar artış var, ancak zamanınızın% 95’inin sorun yok.Ancak saatlerce harcayan deneyimli WordPress geliştiricileri, milyonlarca tema ve eklenti etkinleştirerek ve devre dışı bırakarak hataların nedenini izleyerek ne demek istediğimi bilecektir.Olay tabanlı bir sistemle birlikte gelen karmaşıklık budur.