fbpx

Zalety wzorca projektowego Command

Opublikowane przez Jerzy Wickowski w dniu

Wzorców projektowych jest cała masa. Jedne są skomplikowane, inne wręcz banalnie proste. Dzisiaj przedstawię niebezpośrednie zalety używania jednego z nich, tego, którego mimo swojej prostoty, możliwości są wręcz nieograniczone. Skupię się, nie tyle na jego praktycznym wykorzystaniu, co na ogólnych zaletach jakie dostarcza wzorzec projektowy Command, po polsku Polecenie.

Awans

Jego przykładowa implementacja w języku C# może wyglądać następująco:

public interface Command 
{
   void Execute();
}

Myślisz, że to żart? Oczywiście, że nie. Chociaż na pierwszy rzut oka, możesz odnieść takie wrażenie. Ten kod powyżej, jest podstawowym składnikiem wzorca projektowego Command. Tak, interfejs wraz z jedną metodą Execute(), nie zwracającą nic. Taki prosty zabieg pozwala na awansowanie metody do poziomu klasy. Dzięki czemu może być traktowana dwojako. Jako metoda i jako klasa jednocześnie, co otwiera dla niej zupełnie nowe możliwości i daje ogrom zalet.

Uproszczenie

Największym plusem tego rozwiązania jest uproszczenie kodu na wielu frontach. Przykładowo możesz zamknąć pewien fragment logiki w hermetycznym pudełku odseparowanym od świata zewnętrznego. Dzięki czemu ułatwisz sobie pisanie testów jednostkowych. A co za tym idzie, jest ogromne prawdopodobieństwo, że taki kod będzie dużo prostszy w napisaniu i utrzymaniu. Wraz z tym krokiem, otworem stoją kolejne drzwi, za którymi już czekają refaktory i optymalizacje. Ponadto taka struktura sprzyja zachowaniu zasad SOLID, zwłaszcza opisywanemu już mojemu podejściu do Single Responsibility Principle.

Inne wzorce

Mimo tych zalet, Command, sam z siebie jest dość mało użyteczny. Swoją moc pokazuje dopiero podczas współpracy z innymi wzorcami projektowymi, jako ich składowa. Przykładem może być Active Object, State Machine, czy Chain of Responsibility. Jak i ostatnio bardzo popularny CQRS.

Mimo braku praktycznego przykładu, mam nadzieję, że zgadzasz się ze mną, iż użycie tego wzorca zwiększa znacząco jakość kodu. Nawet w sytuacji, gdy nie wykorzystujemy w pełni jego potencjału. Czy często masz okazję używać Komanda w swoich aplikacjach? Czy widzisz jeszcze jakieś jego zalety? A może wady? Zapraszam do dyskusji.



Czy to był wartościowy artykuł? Zapisz się, a wyślę Ci dwa ebooki o czystym kodzie oraz będę informował Cię o nowych postach

2 Komentarze

Tomasz · 2017-11-22 o 13:57

Jak użyłem tego wzorca w aplikacji desktopowej (C# WinForms) to zrobienia głównego menu (ribbon – wstążka). Każdy przycisk to oddzielna klasa, która ma metodę Execute + kilka właściwości opisujących przycisk (ikonę, widoczność, kolejność, grupa itd.).

Na starcie aplikacji przy pomocy IoC wyciągam wszystkie takie klasy (implementują odpowiedni intefejs). Taką kolekcję przekazuję do odpowiedniej metody, która na tej podstawie robi mi ładne menu główne :)

Dzięki temu nie ma mnóstwa kodu wpisanego na sztywno jak wygląda menu. Wszystko jest ładnie w klasa, wszystko w zgodznie z SOLIDem.

    Jerzy Wickowski · 2017-11-24 o 05:55

    @Tomasz: Cześć, dzięki za komentarz.
    Bardzo przyjemny przykład. Sam nie pamiętam, kiedy ostatnio projektowałem menu. Takie czasy i człowiek coraz więcej w webówce siedzi. Jednak kiedy mi przyjdzie taka potrzebna to z pewnością Twój pomysł mi wróci do głowy.

Dodaj komentarz

Twój adres email nie zostanie opublikowany.

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.


Zapisz się

Wyślę Ci dwa dokumenty mówiące o jakości kodu. Dodatkowo będę Cię informował o nowych postach i nowościach.