Wzorce projektowe w C#

Pytanie, które pojawiło się podczas szkolenia Wzorce projektowe w C# realizowanego w dniach 20-21.07.2017 r.


Czy faktycznie warto stosować wzorzec Fluent API?

Celem Fluent API jest zwiększego czytelności kodu. Niestety wiele przykładów, które można znaleźć w sieci ogranicza się tylko do przykładu zastąpienia konstuktora lub inicjalizatorów sekwencją metod (Method chaining) do konstruowania obiektu. To nie pokazuje siły tego wzorca.

Sądzę, że dobrym przykładem są wyrażenia regularne (regex expression).

Spójrzmy na przykład kodu do walidacji adresu www:

Do zrozumienia tego kodu wymagana jest znajomość wyrażeń regularnych i dla niektórych może być bardzo enigmatyczny.

A teraz spójrzmy na kod napisany nieco inaczej ale realizujący to samo zadanie:

To przykład zastosowania Fluent API z użyciem biblioteki VerbalExpressions. Do zrozumienia powyższego kodu nie jest potrzebna znajomość wyrażeń regularnych! Owszem klasa VerbalExpressions nadal używa wyrażeń regularnych, ale wewnętrznie i upraszcza kod z punktu widzenia programisty.

Dlatego warto stosować Fluent API, ale nie może być stosowany w ciemno bo jest modny, lecz tylko w sytuacjach, gdzie faktycznie uprości to tworzenie kodu i zwiększy jego czytelność.

Ja na przykład zastosowałem go do uproszczenia generowania raportów Crystal Reports. Standardowe Crystal Reports API jest dosyć złożone, więc utworzyłem własną klasę zgodną z Fluent API i kod jest dużo czytelniejszy: