Prism 9.0 – Filtrowanie subskrypcji (IEventAggregator)

Tworzenie aplikacji WPF bywa czasem jak zarządzanie chaotycznym ekosystemem – masz mnóstwo komponentów, które muszą wymieniać się informacjami, ale nie chcesz, żeby wszystko zawsze trafiało do wszystkich. I tu wchodzi Prism – biblioteka, która pomaga trzymać porządek w tym całym zamieszaniu, umożliwiając łatwiejsze zarządzanie komunikacją między różnymi częściami aplikacji. Kluczowym narzędziem w Prism jest IEventAggregator, który pozwala na publikowanie i subskrybowanie zdarzeń. Ale jak to bywa w życiu programisty, czasem proste rozwiązania mają swoje wady – na przykład nadmiar subskrypcji, które mogą niepotrzebnie obciążać naszą aplikację. Tu na scenę wkracza nowość w Prism 9.0filtrowanie subskrypcji.

Co to w ogóle jest ten IEventAggregator?

Na początek przypomnijmy, czym w ogóle jest IEventAggregator. To taki pośrednik, który umożliwia komunikację między różnymi elementami aplikacji. Zamiast każdemu komponentowi (na przykład widokom) mówić, co ma robić, wystarczy, że „publikujesz” zdarzenie, a subskrybenci, którzy się na nie zapisali, je otrzymują i mogą na nie zareagować. To bardzo wygodne, bo pozwala uniknąć ścisłych zależności między komponentami. Zamiast tworzyć miliony powiązań między widokami a modelami, używasz pośrednika (czyli IEventAggregator), który zarządza wszystkim za ciebie.

Problem: Za dużo subskrypcji

Załóżmy, że masz dużą aplikację, która ma mnóstwo widoków, które subskrybują te same zdarzenia. Bez filtrowania, każda subskrypcja otrzyma każde zdarzenie, które zostanie opublikowane, co może prowadzić do problemów z wydajnością. Zamiast tylko niektóre widoki reagujące na zdarzenie, wszystkie je dostaną, nawet jeśli w ogóle ich to nie interesuje.

Co gorsza, niektóre subskrypcje mogą nie być potrzebne w danym momencie, a mimo to aplikacja będzie je przetwarzać. To jak z niepotrzebnym kodem, który się ciągle uruchamia i zżera zasoby – nikomu to nie jest potrzebne, ale dzieje się.

Filtrowanie subskrypcji – nowość w Prism 9.0

I tu wchodzi filtrowanie subskrypcji w Prism 9.0. To coś, co pozwala ci bardziej precyzyjnie określić, które subskrypcje mają reagować na konkretne zdarzenie. Dzięki temu możesz ustawić, że zdarzenie nie będzie trafiać do każdego widoku, ale tylko do tych, które spełniają określone warunki. Na przykład, możesz ustawić, że tylko widok dla administratorów będzie reagować na zmiany danych użytkownika, a inne widoki to zignorują. Pamiętaj, że całą aplikację najlepiej tworzyć, używając wzorca MVVM.

Zamiast przyjmować wszystkie zdarzenia na raz, możesz wybrać tylko te, które naprawdę cię interesują. To jak filtrowanie spamu – dostajesz tylko to, co istotne, reszta jest odrzucana.

Jak to działa w praktyce?

Załóżmy, że mamy aplikację, która reaguje na zmiany danych użytkowników. W klasycznym podejściu każda subskrypcja dostaje wszystkie zmiany, ale w wersji z filtrowaniem możemy określić, że tylko użytkownicy z rolą „admin” będą dostawać te zmiany.

Przykład kodu C Sharp:

public class UserEvent : PubSubEvent<User>
{
}

public class AdminUserSubscriber
{
    private readonly IEventAggregator _eventAggregator;

    public AdminUserSubscriber(IEventAggregator eventAggregator)
    {
        _eventAggregator = eventAggregator;
        _eventAggregator.GetEvent<UserEvent>()
            .Subscribe(OnUserChanged, 
                       ThreadOption.PublisherThread, 
                       false, 
                       user => user.Role == "Admin");
    }

    private void OnUserChanged(User user)
    {
        // Logika obsługi zmiany użytkownika z roli Admin
    }
}

W tym przypadku subskrybent AdminUserSubscriber subskrybuje zdarzenie UserEvent, ale tylko jeśli użytkownik ma rolę „Admin”. Dzięki temu inne komponenty, które nie są zainteresowane tymi danymi, nie muszą się z nimi męczyć. Proste, prawda?

Korzyści z filtrowania subskrypcji

Wprowadzenie filtrowania subskrypcji w Prism 9.0 ma kilka świetnych zalet:

  1. Lepsza wydajność – ponieważ tylko te subskrypcje, które naprawdę tego potrzebują, dostają dane zdarzenie. Zmniejsza to niepotrzebne obciążenie i przyspiesza aplikację.

  2. Większa kontrola – masz pełną kontrolę nad tym, które widoki i komponenty dostają zdarzenia. Możesz je dopasować do konkretnego kontekstu.

  3. Łatwiejsze zarządzanie kodem – mniej subskrypcji i bardziej precyzyjne filtry sprawiają, że kod jest bardziej przejrzysty i łatwiejszy do utrzymania, zwłaszcza w dużych aplikacjach.

Podsumowanie

Filtrowanie subskrypcji w Prism 9.0 to mega ułatwienie, jeśli chodzi o zarządzanie komunikacją między komponentami aplikacji. Dzięki temu masz pełną kontrolę nad tym, które komponenty reagują na dane zdarzenia, a Twoja aplikacja staje się bardziej wydajna. Warto wykorzystać tę funkcję, zwłaszcza w większych projektach, gdzie komunikacja między różnymi częściami aplikacji może łatwo wymknąć się spod kontroli. Filtrowanie to coś, co na pewno warto dodać do swojego arsenału, żeby aplikacja była szybka i łatwa do utrzymania.

Podobne wpisy

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *