Zastanawiam się nad wyborem środowiska Adobe AIR jako technologii implementacji po stronie klienta dla nadchodzącego projektu. (Poprzednim wyborem były C# i WPF, ale ostatnio byłem pod wielkim wrażeniem Flash/Flex/AIR.)Budowanie architektury wtyczki za pomocą Adobe AIR
Ale jedną z najważniejszych cech mojego produktu będzie jego architektura wtyczek, pozwalająca twórcom stron trzecich na rozszerzyć funkcjonalność i GUI w interesujący sposób.
Wiem, jak zaprojektować architekturę w języku C#: Program ładujący dodatki wyliczy wszystkie zestawy w lokalnym katalogu "app/plugins /". Dla każdego zestawu wylicza wszystkie klasy, szukając implementacji interfejsu "IPluginFactory". Dla każdej wtyczki stworzonej przez fabrykę, poprosiłbym o jej klasy MVC, i zatrzasnę jej elementy GUI (elementy menu, panele, itp.) W odpowiednich slotach w istniejącym układzie GUI.
Chciałbym osiągnąć to samo w środowisku AIR (ładowanie wtyczek z lokalnego systemu plików, a nie z sieci). Po przeczytaniu this article rozumiem, że jest to możliwe i że podstawowa architektura (ładowanie plików SWF do piaskownicy ApplicationDomains itp.) Jest bardzo podobna do sposobu, w jaki robiłbyś to w .NET.
Ale jestem ciekawy tematów.
Jeśli któryś z was wykonał dynamiczne ładowanie klas za pomocą Flash Playera (najlepiej w mieszanych aplikacjach Flash/Flex, a szczególnie w hostach AIR), chciałbym usłyszeć o waszych doświadczeniach związanych z budowaniem frameworka wtyczek i wpadł w trudne sytuacje z Flash Playerem, a także z Flash, Flex i AIR API.
Na przykład, jeśli ktoś zadał mi to samo pytanie, ale z myślą o platformie Java, zdecydowanie powiedziałbym, że JVM nie ma pojęcia "modułów" lub "złożeń". Najwyższym poziomem agregacji jest "klasa", więc tworzenie struktur organizacyjnych w systemie wtyczek do zarządzania dużymi projektami może być trudne. Porozmawiałbym również o problemach z wieloma klasami ładującymi i o tym, jak każdy zachowuje swoje własne oddzielne wystąpienie załadowanej klasy (z własnymi oddzielnymi statycznymi varsami).
Oto kilka konkretnych pytań wciąż bez odpowiedzi dla mnie:
1) ActionScript klasa "Loader" można załadować do SWF z ApplicationDomain. Ale co dokładnie zawiera ta aplikacja? Moduły? Klasy? W jaki sposób są reprezentowane komponenty MXML? Jak znaleźć wszystkie klasy implementujące mój interfejs wtyczki?
2) Jeśli masz ładowaną wtyczkę do osobnej aplikacji ApplicationDomain z głównej aplikacji, czy jest znacznie bardziej skomplikowany kod wywołania z tej innej aplikacji? Czy istnieją jakieś istotne ograniczenia dotyczące rodzajów danych, które mogą przechodzić przez warstwę sortowania między aplikacjami? Czy marszowanie jest zbyt drogie?
3) Idealnie, chciałbym rozwinąć większość mojego własnego głównego kodu jako wtyczki (z główną aplikacją jest niewiele więcej niż powłoką ładującą plugin) i użyć architektury wtyczki, aby wciągnąć tę funkcjonalność do aplikacja. Czy to powoduje strach w twoim sercu?
Bardzo ładne. Czy twój interfejs API wtyczki jest otwarty? – benjismith
Nie, a nawet jeśli tak, to jest dość specyficzne dla aplikacji, dla której został napisany. Wszystko, co jest "generyczne" na ten temat, zostało wyjaśnione w odpowiedzi, którą napisałem. – hasseg
Gotcha. Przyjrzę się twoim liniom. (Zaczęło się od flexu tylko w zeszłym tygodniu, więc nie wiem jeszcze wiele o modułach Flex.) Jeszcze jedno pytanie ... W podłączanej aplikacji AIR chciałbym, aby użytkownicy mogli * instalować * wtyczki. Biorąc pod uwagę standardowy instalator AIR, jak poleciłbyś go obsługiwać? – benjismith