ASP.NET MVC sitesi modüler nasıl yapılır


14

ASP.NET MVC 4 ile çalışan bir intranet sistemi için planlama aşamasındayım. Sitenin her biri farklı bir özellik sağlayan ayrı "modüllerden" oluşmasını istiyoruz: mesajlaşma, bordro değişiklikleri, vb. Bu modüllerin derleme zamanında etkinleştirilmesini veya devre dışı bırakılmasını istiyorum. Ana sayfada, yüklenen her modüle bağlanacak bir tür gezinme görüntülenir.

Bu şimdiye kadar kolay, ancak navigasyon özelliğinin önceden modüller hakkında bilgi sahibi olmasını istemiyorum. Başka bir deyişle, modüllerin dinamik olarak keşfedilebilir olmasını istiyorum; Yeni bir modül için kod yazmak ve daha sonra kaynak başka hiçbir yerde değişiklik olmadan gezinti çubuğuna bir bağlantı eklemek istiyorum. Her modülün kendini gezinme çubuğuna kaydetmenin bir yolu olmalı ve - daha da önemlisi - bu her modül yüklendiğinde yapılmalıdır.

Bu, sitenin düzeninin önceden bilindiği durum için tasarlandığından, MVC'nin Alanlarını kullanmayı engellediğine inanıyorum. Her ne kadar insanlar MEF'in MVC ile birleştirilmesinde karışık başarı elde etmiş gibi görünse de MEF uygun görünebilir . MEF aslında buraya gitmenin yolu mu yoksa ihtiyacım olanı başarmanın daha iyi bir yolu var mı?


İyi soru, çözümünüzün muhtemelen yansıma kullanarak döneceği hissine sahibim. Öğelerinizi oluştururken alanları kullanmaya devam edebilirsiniz, ancak menüyü oluşturma yönteminizin tüm türlerinizi elde etmek için yansımayı kullanması gerekir (kod değiştirmekten tasarruf etmek için). Hepsi aynı arabirimi IModule arabirimini uygularsa ne olur? Daha sonra bağlamanız gereken tüm modülleri almak için arayüzün tüm mirasçılarını bulabilirsiniz, sorun o zaman bunu herhangi bir ek veri olmadan bir bağlantıyla tam olarak nasıl ilişkilendireceksiniz ? Hmm arsa kalınlaşıyor ...
mattytommo

1
Bana bir CMS oluşturmak istediğiniz gibi geliyor, ancak CMS yönetimini CMS içinden yapmak yerine, oluşturma zamanında yapılmasını istiyorsunuz. Bu da beni soruya yönlendiriyor, neden derleme zamanında yapılmasını istiyorsun?
James P. Wright

@ JamesP.Wright Pekala, derleme sırasında bunu yapmak istememin sebebi, sitedeki bir sayfa aracılığıyla bu işlevselliği ortaya koymaktan daha basit gibi görünüyordu. (Ayrıca, kullanılan modül grubu, bu tür dinamik seçimin ek yükünün gerekli olmadığı kadar nadiren değişecektir.) Ancak, gerçekten, derleme sırasında modülleri seçmekten daha önemli olan, uygulamanın modülleri bulma yeteneğidir. birinci olan, daha çok sorumun itişi.
bdesham

nopCommerce ( nopcommerce.com/documentation.aspx ) kısmen istediğiniz iyi bir örnektir. Bir eklentinin nasıl yazılacağına ve DI için yaklaşımlarına bir göz atın.
Rui Marques

Araştırma amacıyla, MEF'i MVC ile birleştirmede 'karışık başarının' ne olduğunu merak ettim. Günümüzde codeplex "Arşivde yaşamak" olduğundan, OP'nin sağladığı bağlantı artık çalışmıyor. Başkasına zaman ayırmak için: archive.codeplex.com/?p=mef ;)
Kevin

Yanıtlar:


4

İlk önce app derlenmiş modülleri statik bir yapıcı ve statik bir üye sistemdeki modüllerin listesi ile kaydetmek için kullanılan merkezi bir sınıf olurdu. Modüller, bir menü öğesi olup olmadığını ve menüde hangi sırayla görünmesi gerektiğini belirten statik bir özelliğe sahip olacaktır.

Her modül, modüllerin kaydını tutan merkezi sınıfta kendini not edecek kendi statik yapıcısına sahip olacaktır.

Bu sistemi daha çok çalışanların gelip girdiği bir zaman saati sistemi gibi düşünün. Sonra bordro zamanında tüm çalışanlara kimin saatte çalıştığını vb.

Yansıma ayrıca, bu özelliklerden meta özellik bilgisinden miras almaları gereken modüller üzerinde bir arayüz sözleşmeniz varsa da kullanılabilir.

Warner Brothers Music'te çalıştım ve farklı kodlama formatları için dahili bir müzik işleme sistemi yaptım. Kalıtım kullanılan yansıma ile kodlama için genel bir eklenti modeli yaptım, böylece sınıfın temel meta özelliklerini almak için yansıma ile typecast olabilir. Gerçi statik bir merkezi sınıf kullanarak denemedim. Sadece bunu rastgele denemek için başka bir yol olarak düşünün.

Ben de bir temel gereksinimi ile birden çok istemcilere hizmet MVC kullandım ama aynı zamanda yapmaya çalıştığınız gibi benzer gelişmiş özellikleri ile ekledi. Bunun yerine MVC'yi bir derleme gerektirmeden App_Code kullanarak dönüştürdüm. Merkezi bir derlemeye ihtiyaç duymadan dosyaları bu şekilde itmek daha kolaydır.

JIT'i yerel olarak derlemek ve DLL'leri dolaşmak yerine basit FTP veya GIT push ile kullanabilirsiniz.

İşte yığın taşması ile ilgili makaleye bir link


Bu benim hayal ettiğim şeye benziyor. Tek sorun, ilk etapta modülleri nasıl yükleyebilirim? Hangi mekanizmalardan her birine kendilerini merkezi sınıfa kaydettirmelerini söylerim? MEF uygun görünüyordu.
bdesham

MEF iyidir. Ona bakmadan fikir veriyordum ama MEF'i bu projeleri yaptığımda dışarıda olsaydı bu seçenek göz önüne alınırdı. İyi bir fikir gibi görünüyor. MEF ve MVC'yi neden birleştiremediğinizi anlamıyorum.
Jason Sebring

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.