Wzorce projektowe w C# - 3 pytania i odpowiedzi ze szkolenia (marzec 2022)

Seria pytań uczestników, które pojawiły się podczas szkolenia Wzorce projektowe w C# realizowanego w dniach 14-16.03.2022 r.


W jaki sposób przyspieszyć wyświetlanie zdjęć odczytywanych z dysku?

Proponuję zastosować cache z użyciem bazy danych REDIS i wzorca projektowego Proxy.

Przykład implementacji:

https://github.com/sulmar/vavatech-ngk-design-patterns/blob/master/src/DesignPatterns/ProxyPattern/RedisCacheImageRepository.cs

Przykład użycia:

https://github.com/sulmar/vavatech-ngk-design-patterns/blob/master/src/DesignPatterns/ProxyPattern.UnitTests/RedisCacheImageRepositoryTests.cs 

W jaki sposób przetwarzać dane pomiarowe? Potrzebujemy uśredniać pewne wartości i wykrywać przekroczenia progów, np. temperatury.

Proponuję zastosować wzorzec projektowy Obserwator. Najlepiej oprzeć się na 2 podstawowych interfejsach, które znajdują się w przestrzeni System:

IObserver i IObservable.

Interfejs IObservable reprezentuje obserwowane wartości, natomiast IObserver to interfejs "nasłuchujący" te wartości. Na podstawie tych interfejsów można napisać własne implementacje lub skorzystać ze świetnej biblioteki Reactive Extensions:

https://reactivex.io

Posiadamy aplikację, w której ręcznie musimy podmieniać plik konfiguracyjne. Użytkownicy chcieliby mieć możliwość łatwego przełączania się pomiędzy konfiguracjami (produkcja, testy) oraz powrotu do wcześniejszych ustawień. W jaki sposób to zrealizować?

Rekomenduję zastosowanie wzorca projektowego Memento.

Memento umożliwia tworzenie migawek stanu danego obiektu (snapshot). Standardowo dotyczy to właściwości obiektów, ale w tym przypadku możemy potraktować załadowany plik jako stan.

Przykład implementacji:
https://github.com/sulmar/vavatech-ngk-design-patterns/blob/master/src/DesignPatterns/MementoPattern/Models/Configuration.cs