2009-05-19 10 views
7

Jestem pod ogromnym wrażeniem rosnącej liczby platform programistycznych, które pozwalają programistom zewnętrznym wnosić kod za pośrednictwem architektury plug-in (wtyczki/rozszerzenia).Projektując platformę programową, jakie są kluczowe elementy składające się na udaną architekturę wtyczek?

ja studiuje które platformy mają najlepsze społeczności wtyczek ...

Doskonałe architektury wtyczek z kwitnącej społeczności plugin:

Następnie są platformy z mniej aktywnych społeczności plugin:

(Dla ostrości, odłóżmy na bok lub zignoruj ​​platformy, które umożliwiają pełnowartościowe aplikacje, takie jak Microsoft Windows, iPhone i Facebook.)

Co byś powiedział, że platforma oprogramowania jest udaną architekturą wtyczek z wieloma wtyczkami w porównaniu z inną platformą z mniejszą lub nieaktywną społecznością programistów?

Żeby dostać rzeczy rozpoczęte, tutaj jest częściowa lista:

  • Platforma robi coś zasadniczo użyteczne: załóżmy, ludzie przeglądania stron internetowych, kupować i sprzedawać rzeczy, publikować blogi i fora dyskusyjne, itp
  • Platforma jest open source (lub przynajmniej kod źródłowy jest swobodnie dostępny).
  • Wszystkie ważne funkcje platformy są w pełni plugawe poprzez haki i filtry.
  • Wszystkie lub większość funkcji wtykowych są dobrze udokumentowane (lub istnieje wiki, aby programiści mogli je dla ciebie udokumentować).
  • Istnieje forum lub lista e-mail, na której programiści mogą udostępniać wtyczki oraz udostępniać porady i wskazówki
  • Istnieje forum lub lista e-mail, na której mniej zaawansowani użytkownicy mogą uzyskać pomoc przy instalowaniu i konfigurowaniu wtyczek.

Co może zrobić programista platformy, aby stworzyć wtyczkową architekturę, która zachęca wielu zewnętrznych programistów do tworzenia wtyczek?

Odpowiedz

1

Osobiście tam 3 główne contributers czy uczę się (i nie) pisać aplikacje dla danego systemu:

jest systemem bardzo przydatna tak, że chciałbym, aby używać go na tyle, aby być wystarczająco zmotywowani, aby rozszerzyć to?

Czy system wykorzystuje język, który jest mi znany lub łatwy do opanowania, w przeciwieństwie do niektórych niejasnych lub zastrzeżonych lub w inny sposób zbyt skomplikowanych rozwiązań (patrz elisp)?

Czy system wtyczek bardzo dobrze udokumentowane w jasnym językiem tak, że mogę iść o pracy pisanie moje wtyczki i nie spędzać godzin (lub dni) rozszyfrowanie systemu?

Jeśli te rzeczy są prawdziwe, tylko dlatego, że nie chciałby, aby opracować dla platformy jest to, że ktoś inny już napisał wtyczki dla wszystkich swoich pomysłów. :)

myślę, że to również niezwykle pomocne/ważne, aby mieć centralną i dobrze znaną repozytorium do pomieści użytkownika przyczyniły wtyczek (jak na swoje przykładowych projektów). Nienawidzę konieczności przeszukiwania sieci, aby znaleźć pojedyncze, prawdopodobnie niskiej jakości lub nawet złośliwe dodatki do czegoś, co próbuję zrobić. Powinna to być strona internetowa lub wiki, ponieważ nawet fora lub archiwa list dyskusyjnych mogą być denerwujące i czasochłonne.

+0

@jess Dobry punkt o społeczności, co jest dobre oprogramowanie (wtyczki), którego nie mogę łatwo znaleźć. Niestety, z jakiegoś powodu jestem zirytowany, nawet gdy jest dobra społeczność, dlatego nie używam Firefoksa, po prostu nie chcę tracić czasu na szukanie dobrych wtyczek. – Crippledsmurf

1

Brakuje punktu.

JVM jest architekturą wtykową. Każdy plik klasy podłącza się do niego i rozszerza go.

Apache to architektura wtykowa na kilku poziomach. Istnieją "mody". Niektóre mody uruchamiają inne interpretery, które same są w postaci wtyczek. PHP, mod_wsgi/Python itd. Są podłączone do Apache.

Python jest wtykany architektura z plikami Pythona .pyc i sprzeciw plików (DLL'S, .so), że podłączenie do niego.

Każda struktura językowa jest - w rzeczywistości - architekturą wtykową.

+0

Miałem wrażenie, że pytał o aplikacje jako platformy, a nie języki programowania czy same maszyny wirtualne. – jess

+0

Nie widzę różnicy między aplikacją JVM i innymi aplikacjami. To jest aplikacja. Można go podłączyć. Ponieważ Python VM może być osadzony w innych aplikacjach, nie jest dla mnie jasne, gdzie można narysować linię. Być może możesz zaktualizować pytanie z definicją. –

+0

@S Lott To zmusiło mnie do myślenia, myślę, że zgadzam się w pewnym stopniu z koncepcją, którą tu wygłaszacie. Zwykle postrzegam bibliotekę wokół języka jako platformy, a sam język jako narzędzie używane do interakcji z platformą. .NET jest platformą, zapewnia BCL, z którą mógłbym współpracować w dowolnym obsługiwanym języku .net – Crippledsmurf

1

Platforma jest Fundacja

Jeden widok platformy oprogramowania jest jako fundament, na którym opiera się inne oprogramowanie w celu wykonania innego zadania. Może to stanowić proste i dość oczywiste stwierdzenie, ale jest ważne.

Podstawy powinien być łatwy

Platforma musi mieć cel i deweloperzy platform powinni być świadomi tego przy projektowaniu interfejsów API, dzięki czemu staje się oczywiste, co primarry przypadki użycia są i API wokół nich powinny być wykonane jako straightford, jak to możliwe, w odniesieniu do sposobu, w jaki zostały zaprojektowane, ale także w odniesieniu do dokumentacji wokół nich.

rozszerzeń Punkty powinno być oczywiste

Rozszerzalność w platoform o zapewnienie programistom oppotunity przedłużenia lub zmiany platformy. Jeśli jest to coś, co chcesz zachęcić, musisz bardzo jasno określić naturę i ograniczenia tej rozszerzalności oraz dostarczyć dobrze zdefiniowany zestaw interfejsów, aby to umożliwić.

Może to wszystko brzmi banalnie, ale jeśli chcesz się rozwijać społeczność wokół platformy, że Platforma musi mieć przeznaczenie i jej rozszerzenie powinno być proste doświadczenie.

Przepraszam, jeśli szwy trochę „achitectural astronaught”, ja sądzę, zrobiłem kilka ważnych punktów, I może dobrze, że były one źle, nie krępuj się zwrócić na to uwagę lub dodać do nich

0

Nie zapomnij Eclipse (z >1000 registered 3rd party "plugins" (w rzeczywistości są one wykonane z jeszcze mniejszych wtyczek w terminologii Eclipse)). Część jego sukcesu może pochodzić stąd, że istnieją dobre zasady dotyczące projektowania wtyczki, którą można także rozszerzyć na inne. Istnieje również ścisła polityka wersjonowania API (która oczywiście ma również swoje wady).