Takılıp kapanabilen yazılımlar nasıl geliştirilir?


20

Bir çeşit uygulamanız varsa ve kullanıcılarınızın bunun için eklentiler yazmasını istiyorsanız, uygulama nasıl tasarlanmalıdır?

Dikkate almanız gereken şey, bunun için hangi tasarım desenleri vb?


Gözlemci, Arabulucu, Komut ve Sorumluluk Zinciri gibi modeller akla geliyor
Mchl

3
@Mchl: Lütfen yanıtınızı yorum olarak değil, cevap olarak gönderin.
S.Lott


Bunun için yeterince ayrıntılı olmadığını hissediyorum
Mchl

@Mchl: "yeterince ayrıntılı değil"? O zaman neden hiç yorum yapmıyorsunuz? Bu açıkça bir cevap. Lütfen cevapları cevap olarak gönderin.
S.Lott

Yanıtlar:


13

Bu biraz platformunuza bağlıdır, ancak akılda tutulması gereken bazı genel şeyler

Sürüm oluşturma Uygulamanızı güncellerseniz ne olur, tüm eski eklentiler eski olur mu (firefox sorunu)

Yalıtım Eklentiler istediklerini yapabilir mi? Onlara her zaman güveniyor musun? Veya bunları bir tür sanal alanda çalıştırmanız ve izin istemeniz gerekiyor mu?

Güncellemeler Eklenti güncellemelerini nasıl ele alırsınız?

Güvenlik Bir eklentinin yazarını nasıl sağlarsınız, kimlik sahtekarlığını veya kullanıcının kötü amaçlı kod yüklemek için kandırılmasını nasıl önlersiniz? Genellikle bir tür kod imzalama ile çözülür

Serileştirme Genellikle bir tür izolasyon kullandığınızda, farklı iş parçacıkları veya işlemler arasında bilgileri serileştirmeniz gerekir. Bunu en verimli şekilde nasıl yapıyorsunuz?

Genişletilebilirlik Hangi özellikleri genişletmeniz gerekiyor? API'nin kullanılmaması durumunda eklentilerin potansiyelini nasıl en üst düzeye çıkarırsınız?

Eklentiler için üçüncü taraf geliştiricileri hedefliyorsanız, en önemli şeyin (tecrübemden), api eklentisini ve sınıflarını uygulamanın geri kalanından tamamen farklı görmek ve geliştirmeyi kolaylaştırmak olduğunu söyleyebilirim. olabildiğince. Ana uygulamadan mimarinin eklentilere "sızması" çok kolaydır, böylece eklenti yazarları olması gerekenden çok daha fazla şey öğrenmek zorundadır. Onlar için kolaylaştırın, eklenti yazarı olarak ne tür bir arayüz ve deneyim istediğinizi düşünün.

Bir başka iyi zihniyet "eklenti tüm bunları (kodda) yapacak, daha çok" eklenti bu bilgiyi vermelidir "şeklinde düşünmektir. Bu şekilde uygulama gerekli bilgileri tüketebilir ve basitleştirecek gerçek işlemleri yapabilir eklenti.

Ayrıca, genel olarak, kod yerine açıklayıcı bir yaklaşıma (xml gibi meta veriler) gidebildiğinizde, meta verilerin taşınması, sürümü, dağıtımı, güvenliği ve üçüncü taraflarca daha kolay yapılandırılabilmesi nedeniyle büyük bir avantajınız vardır.


1
+1 Bu soruya doğrudan cevap vermiyor, ancak bunlar akılda tutulması gereken önemli konular
Adriano Carneiro

Herkesin gerçek genişletilebilirlik mekanizmasını geliştirmeye başlamadan önce bu konuların ele alındığına inanıyorum
Gus

9

.NET'te genişletilebilirlik için MEF kullanma hakkında bu Code Project makalesini yazdım . İyi bir tanıtım.

.NET için SharpDevelop'un Eklenti Mimarisi , Mono.Addins ve System.AddIn gibi başka genişletilebilirlik çerçeveleri de vardır .

Java için Eclipse Eklenti Mimarisi vardır .

Genel örüntü şudur:

  • Ana bilgisayar ve uzantı arasında bir sözleşme (normalde bir arayüz) tanımlarsınız
  • Dışarı çıkan ve yüklü uzantıları arayan bir keşif mekanizmasına ihtiyacınız var
  • Uzantıları dinamik olarak yükleyebilmeniz ve ana bilgisayarı bunlardan haberdar edebilmeniz gerekir

Uygulamada Bağımlılık Enjeksiyonu ve Strateji Kalıbı ile çok şey paylaşıyor.


+1 MEF ve System.AddIn her ikisi de bakmak için iyi şeylerdir. Bunları kullanmasanız bile, her ikisi de iyi kavramlar gösterir.
RationalGeek

@jkohlhepp - Kabul ediyorum ve ayrıca SharpDevelop mimarisine derin bir dalış önereceğim çünkü bunun hakkında çok şey yazılmış, açık kaynak (MEF, btw gibi) ve iyi tasarlanmış.
Scott Whitlock

3

Sadece eklentiler için bir arayüz sağlamanız gerekiyor.

En azından bir Activate-Metodu (bir giriş noktası) içermelidir, ancak Initialize vb.

Ve ana makine uygulamasıyla, örneğin menü öğelerini kaydetmek için kayıt defteri benzeri bir şekilde iletişim kurma olasılığı olmalıdır. Bu nedenle, eklentiler için değiştirilebilir / genişletilebilir şeyler için kayıtlar sağlanmalıdır.

Ayrıca, ana uygulama verileri ve nesneleri için erişilebilir bir depolama alanı olmalıdır, böylece eklentiler rutinlerini çağırabilir. Bu, Unity gibi bir DI-Container kullanarak ve eklentilerin ona erişmesine izin vererek kolayca yapılabilir, böylece ihtiyaç duydukları hizmetleri çözebilirler.

Bir Event-Aggregator da muhtemelen iyi bir fikirdir, bu nedenle eklentiler olayları atabilir ve diğer eklentilerden ve ana bilgisayar uygulamasından gelen olaylara ayrıştırılmış bir şekilde tepki verebilir. Kesinlikle bir tane istiyorsun!

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.