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?
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?
Yanıtlar:
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.
.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:
Uygulamada Bağımlılık Enjeksiyonu ve Strateji Kalıbı ile çok şey paylaşıyor.
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!