Tôi đang nghĩ đến việc chọn Adobe AIR làm công nghệ triển khai phía máy khách cho một dự án sắp tới. (Sự lựa chọn trước là C# và WPF, nhưng gần đây tôi đã thực sự ấn tượng với Flash/Flex/AIR.)Xây dựng Kiến trúc Plugin với Adobe AIR
Nhưng một trong những tính năng quan trọng nhất của sản phẩm của tôi sẽ là kiến trúc plugin, cho phép các nhà phát triển bên thứ ba mở rộng chức năng và GUI theo những cách thú vị.
Tôi biết cách thiết kế kiến trúc trong C#: Trình tải trình cắm thêm sẽ liệt kê tất cả các hội đồng trong thư mục "app/plugins /" cục bộ. Đối với mỗi assembly, nó sẽ liệt kê tất cả các lớp, tìm kiếm các triển khai của giao diện "IPluginFactory". Đối với mỗi plugin được tạo bởi nhà máy, tôi sẽ yêu cầu nó cho các lớp MVC của nó và chụp các phần tử GUI (các mục menu, bảng điều khiển, vv) vào các vị trí thích hợp trong bố cục GUI hiện có.
Tôi muốn thực hiện điều tương tự trong AIR (tải plugin từ hệ thống tệp cục bộ, không phải từ web). Sau khi đọc this article, sự hiểu biết của tôi là có thể, và kiến trúc cơ bản (tải SWF vào ApplicationDomains được đóng hộp cát, vv) rất giống với cách bạn làm trong .NET.
Nhưng tôi tò mò về gotchas.
Nếu bạn đã thực hiện bất kỳ việc tải lớp động nào với trình phát flash (tốt nhất là trong các ứng dụng flash/flex hỗn hợp và đặc biệt trong máy chủ AIR), tôi rất muốn nghe về trải nghiệm của bạn. gặp phải tình huống khó khăn với trình phát flash và với API flash, flex và AIR. Ví dụ, nếu ai đó hỏi tôi cùng một câu hỏi này, nhưng với nền tảng Java trong tâm trí, tôi chắc chắn sẽ đề cập rằng JVM không có khái niệm về "mô-đun" hoặc "hội đồng". Cấp độ tổng hợp cao nhất là "lớp", do đó có thể khó tạo cấu trúc tổ chức trong hệ thống plugin để quản lý các dự án lớn. Tôi cũng nói về các vấn đề với nhiều trình nạp lớp và cách mỗi cá thể duy trì một cá thể riêng biệt của một lớp được nạp (với các static static riêng biệt của nó).
Dưới đây là một số câu hỏi cụ thể vẫn chưa được trả lời cho tôi:
1) Các ActionScript "Loader" class có thể tải một SWF thành một ApplicationDomain. Nhưng appdomain đó chứa đựng những gì? Modules? Các lớp học? Các thành phần MXML được đại diện như thế nào? Làm cách nào để tìm tất cả các lớp triển khai giao diện plugin của tôi?
2) Nếu bạn đã tải một plugin vào một ApplicationDomain riêng biệt từ ứng dụng chính, có phức tạp hơn khi gọi mã từ bên trong appdomain khác không? Có bất kỳ hạn chế quan trọng nào về các loại dữ liệu có thể vượt qua lớp trộn lẫn giữa các ứng dụng hay không? Là marshalling prohibitively đắt tiền? Lý tưởng nhất, tôi muốn phát triển phần lớn mã chính của riêng tôi như là một plugin (với ứng dụng chính là ít hơn một trình bổ sung tải plugin) và sử dụng kiến trúc plugin để đưa chức năng đó vào ứng dụng. Điều đó có tác động đến nỗi sợ hãi trong trái tim bạn không?
Rất đẹp. API plugin của bạn có phải là nguồn mở không? – benjismith
Không, và ngay cả khi nó đã được, nó khá cụ thể cho các ứng dụng nó đã được viết cho. Tất cả mọi thứ đó là "chung chung" về nó là khá nhiều giải thích trong câu trả lời tôi đã viết. – hasseg
. Tôi sẽ xem xét các liên kết của bạn. (Chỉ bắt đầu với flex tuần trước, vì vậy tôi không biết nhiều về flex Modules nào được nêu ra.) Một câu hỏi nữa, mặc dù ... Trong một ứng dụng AIR pluggable, tôi muốn người dùng có thể * cài đặt * plugins. Với trình cài đặt chuẩn của AIR, bạn đề nghị xử lý như thế nào? – benjismith