Tamamen modüler web uygulamaları nasıl inşa edilir [kapalı]


34

Önümüzdeki aylarda, bir müşteri (v1) için kurduğumuz bir sistemi aldığımız ve sıfırdan inşa edeceğimiz bir projeye başlayacağız. V2 ile hedefimiz modüler hale getirmektir, böylece bu belirli müşterinin kullandığı kendi modüllerine sahip olması için başka bir müşteri tamamen farklı bir modül grubunu kullanabilir. Buradaki hile, A Şirketi'nin bu sistemin çalışma şeklini değiştiren bir dizi ödeme ve kullanıcı modülüne sahip olabileceğidir. B şirketi standart ödeme prosedürüne bağlı kalabilir, ancak ürünlerin nasıl göründüğünü özelleştirebilir.

CoreHerhangi bir müşteri için özel olarak değiştirilebilecek bir şey için esnekliği korurken, tüm müşteriler arasında paylaşılan bir uygulamadan sıfırdan bir uygulama oluştururken uygulama mimarisine bazı iyi yaklaşımlar nelerdir ?

CodeIgniter'ın kancasını gördüm ve bunun 250 kancayla sonuçlanabileceği için iyi bir çözüm olduğunu düşünmüyorum ve hala yeterince esnek değil. Başka çözümler neler? İdeal olarak, kuma bir çizgi çekmemize gerek yoktur.

Yanıtlar:


26

Oldukça organize ve ayrık modülerliği sağlamak için , bazen Sunum-soyutlama-kontrol olarak bilinen Hiyerarşik MVC mimari modelini takip edebilirsiniz (kesinlikle aynı model olmasalar da). Kohana , Alaşım , Akıcılık ve FuelPHP desteği HMVC doğal * ve Kohana en HMVC yaklaşımı tartışılmıştır HMVC ile Ölçekleme Web Uygulamaları ve Performans için optimize HMVC Web Uygulamaları tarafından, Sam de Freyssinet .

Ne yazık ki, CodeIgniter yerel olarak HMVC'yi desteklemiyor. Wiredesignz'ın codeigniter-modular-extensions-hmvc'den ilham alan CodeIgniter'da bir çeşit HMVC desteği sağlamak için kendi kütüphanelerimi oluşturdum . CodeIgniter ve wiredesignz'ın uzantısını tartışan nettus + adresindeki HMVC makalesine çok güzel bir giriş var. Aşağıdaki resim ve alıntı bu eğitimden alınmıştır:

görüntü tanımını buraya girin

Her üçlü birbirinden bağımsız olarak çalışır. Bir triad, kontrolörleri aracılığıyla başka bir triana erişim talep edebilir. Bu noktaların her ikisi de gerektiğinde uygulamanın birden fazla yere dağıtılmasına izin verir. Ek olarak, MVC triadlarının katmanlanması daha derin ve sağlam bir uygulama geliştirmeye izin verir. Bu bizi bir sonraki noktaya getiren birçok avantaja yol açar.

Son olarak, bir HMVC mimarisini benimsemiş olsanız bile, kancalarla doğru yoldasınız, uygulamanıza ve aradığınız otomasyon seviyesine bağlı olarak, kancalarla çözmeniz gereken bazı problemler olacak. . Kancaların iyi kullanımı pre_controllerörneğin monte edilmiş modüller için tüm bağımlılıkların mevcut olduğundan emin olacak bir kanca olacaktır.

* Bilmediğim başkaları da olabilir.


1
ASP.NET MVC'nin desteği var mı?
Robert Harvey,

@RobertHarvey Hiç bir fikrim yok ...
yannis

@Robert Harvey Bana göre bu, bir çerçeveden çok bir kalıptan başka bir şey gibi görünüyor. Belki bir şeyleri özlüyorum ama neden bunu ASP.NET MVC'deki devralma ile yapamadığımı göremiyorum.
Jeremy

3
@ Jeremy: Özellikle görüntülerin bölümlerini tekrar kullanmak istiyorsanız görüntülerde zorlaşır. İlginç görünüyor, ama somun ve civata seviyesinde görselleştirmek zor buluyorum.
Robert Harvey,

Yukarıdaki şemada, üst düzey görünümlerin hiyerarşinin alt kısmında yer alan daha küçük görünümlerden oluştuğu görülüyor. Bu zaten bir dereceye kadar yapılabilirRenderAction()
Robert Harvey

5

Ben bir PHP adamı değilim, ancak java-script tarafında, olabildiğince bağımsız tutmak istediğiniz birçok modüle sahip olacaksanız , bunun için java-script'i olan RequireJS gibi birkaç sistem var. Diğer modüllere bağımlılık gösteren modüller ve çerçeve gerektiğinde yüklenmelerini sağlar.

Buradaki çeşitli çerçeveler, bağımlılıkların nasıl ilan edildiğine, sunucuya ne kadar bağımlılık işleminin yapıldığına, sayfa yüklenmesine veya istek üzerine dinamik olarak ve java'nızı yazma biçiminizi değiştirmek zorunda kalmanıza bağlı olarak değişiklik gösterir. senaryo.

Bu çerçeveler, sunucu tarafı çerçeveniz bunu kullanıyorsa veya sizin için java kodunuzu oluşturuyorsa, ancak java komut dosyanızın sunucu tarafı çerçevenizden bağımsız olmasını isteyebilirsiniz.

Çok fazla java-scriptiniz yoksa, fakat biraz modülerlik istiyorsanız, önce script'leri bağımlılıklarla sıralayarak ve birbirlerini tek bir nesneyle kaydettirerek birbirlerine referans vererek bağımlılıkları işleyen anonim kendi kendine arama işlevlerine bağlı kalabilirsiniz. küresel ad alanı. Bu, en azından onları neredeyse modüler yapar ve uygulamanın size maliyeti yüksek değildir.


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.