2011-12-07 16 views
5

Podczas jednej z moich bieżących aplikacji drapałem się po opracowywaniu prostej architektury opartej na wtyczce na wiosnę. Bez względu na to, jak dużą separację można osiągnąć za pomocą wzorców takich jak MVC, zawsze osiąga się punkt, w którym sprzężenie jest nieuniknione.Rozwijanie architektury opartej na wtyczce na wiosnę

Tak więc zacząłem opcje ważenia. Na początku myślałem, że filtry są dobre. Każda wprowadzona przeze mnie wtyczka byłaby filtrem, który następnie wstawiam do mapy filtra. Oczywiście spowoduje to nieco więcej wysiłku przy wyliczaniu i sprawdzaniu wszystkich filtrów, ale przynajmniej kontrolerzy nie będą musieli przejmować się tym, co się stało z danymi, zanim do nich dotarli, lub co się potem stanie, po prostu będą dbać o to. pobrać modele (poprzez DAO lub inne) i zwrócić je.

Problem polega na tym, że nie wszystkie żądania aplikacji są oparte na protokole HTTP. Niektóre są oparte na wiadomościach e-mail, inne są wewnętrznie zaplanowane (w czasie), więc Filtry nie pomogą wiele, chyba że spróbuję dostosować każdy typ przychodzącego żądania do HTTPRequest, co byłoby zbyt dużym.

Innym, o którym myślałem, było AOP oparte na adnotacjach, w którym opisuję każdą metodę, w której wtyczka przechwytywałaby metody oparte na pewnych konwencjach. Mój problem polega na tym, że najpierw nie mam tak dużego doświadczenia z AOP, a po drugie, po prostu pisanie wszystkich tych konwencji sugeruje już trochę sprzężenia. na podstawie wydarzeń. Każdy rodzaj aplikacji do obsługi żądań w mojej aplikacji (kontroler internetowy, program obsługi poczty e-mail itp.) Będzie rodzajem narzędzia do wysyłania zdarzeń, które będzie wysyłać zdarzenia wiosenne na każde większe działanie. Z drugiej strony, wtyczki będą po prostu nasłuchiwały, kiedy wydarzenie się wydarzy, i wykonają jakąś logikę. Pozwoli mi to również wykorzystać punkt # 1, ponieważ niektóre z tych wtyczek mogą również być filtrami, tzn. Gdy otrzymają powiadomienie o wykonaniu określonej czynności kontrolera, mogą po prostu zdecydować się na nicowanie, a raczej czekać na są wywoływane przez łańcuch filtrów. Widzę to jako nieco przyjemne podejście. Oczywiście, znowu przychodzi nam na myśl, o wydarzeniach dyspozycyjnych, a także o tym, że każda zaangażowana klasa będzie na wieki związana ze Źródłem, ale uważam to za zło konieczne.

Moja główna troska dotycząca wydarzeń wiosennych to wydajność, zarówno pod względem opóźnień, jak i wielkości pamięci.

Nadal nie jestem ekspertem, więc kilka opinii tutaj byłoby ogromną pomocą. Czy wydarzenia wiosenne są najlepsze dla tego typu architektury, czy istnieje inne rozwiązanie, które przegapiłem? Jestem świadomy, że mogą istnieć nawet rozwiązania innych firm, więc byłbym zadowolony, gdyby ktoś mógł wskazać jedną lub dwie wypróbowane i sprawdzone.

Dzięki.

+0

Tak interesujące jak to pytanie, powiedziałbym, że jest to całkowicie wyłączony temat i głosuję, by zamknąć jako "Niekonstruktywny" (przeczytaj definicję i prawdopodobnie się zgodzisz). Myślę, że wiosenne fora/listy mailingowe są miejscem, w którym można o tym porozmawiać. –

+3

Nie rozumiem, dlaczego to pytanie nie jest w ogóle konstruktywne lub nie dotyczy tematu. –

Odpowiedz

1

Koncepcję wtyczki można uzyskać dzięki fabryce fasoli szparagowej. Jeśli utworzysz wspólny interfejs, możesz zdefiniować wiele komponentów bean, które go implementują i wstawiać w razie potrzeby. Możesz też użyć factorybean, aby dostarczyć odpowiednią wtyczkę do zadania.

Twój pomysł wykorzystania wydarzeń nazywa się "Architektura napędzana wydarzeniami". Jest to o wiele więcej niż tylko wtyczki, ponieważ nie tylko oddziela je od implementacji, ale oferuje także możliwość odseparowania od używanej instancji (wielu programów obsługi), lokalizacji (wielu maszyn) i czasu, w którym żądanie jest obsługiwane (asynchroniczne). obsługa). Kompromis jest zwiększoną ogólną złożonością, mniejszą złożonością na poziomie komponentów i potrzebą infrastruktury przesyłania wiadomości. Często używany jest JMS, ale jeśli chcesz tylko konfiguracji z jednym węzłem, Spring i Mule oferują również proste tryby w pamięci.

Aby pomóc ci dalej, powinieneś rozszerzyć nieco wymagania, które chcesz spełnić, i ulepszenia architektoniczne, które chcesz osiągnąć. Jak dotąd wspomniałeś, że chcesz używać wtyczek i opisano niektóre możliwe rozwiązania, ale tak naprawdę nie opisałeś tego, co próbujesz osiągnąć.