Archiwa tagu: strategia

Strategia w praktyce

8Jakiś czas temu oczywiście w celach rozrywkowych potrzebowałem prostego narzędzia, a niczego sensownego nie mogłem znaleźć w nugecie, do zmiany wartości storage entity pattern na computed dla wszystkich właściwości które nazywają się CreateTS lub UpdateTS.

Nic prostszego. Niestety nie mam pierwszej wersji aplikacji, ani kolejnych (nie czułem potrzeby ‚wersjonować’ sobie tego), ale mam wersję finalną którą się chętnie podzielę.

Stworzyłem aplikację konsolową która jako parametry wejściowe przyjmuje argumenty:

  • arg0 – rodzaj programu (w tej chwili jest tylko 1 dostępne polecenie – computed, dzięki temu możemy w łatwy sposób dodawać kolejne polecenia do naszego programu)
  • arg1 – przechowuje ścieżkę do naszego pliku edmx
  • arg2,..,argN – lista parametrów które zostają, w przypadku polecenia computed są to właściwości datetime które chcemy zmienić

Aplikacja nie zwraca żadnych danych, jedyne co robi to edytuje plik edmx.

Kiedy wiemy co do nas przychodzi możemy zacząć działać 🙂

Pierwszą rzeczą którą  należy zrobić jest znalezienie klasy wykonawczej, odpowiedniej dla polecenia. Normalnie przy tłumaczeniu strategy pattern w tym miejscu pojawiłyby się instrukcje warunkowe if, wiele, żeby pokazać jakie to złe podejście, więc.. wyobraźcie sobie dużo if’ów, a ja wam pokażę „ExecutorResolver”.

Tak, tak, magia, zamiast if’ów mamy switcha. Dodatkowo inicjuje w wykonawcy kimkolwiek on by nie był właściwość Path (można tu, można w main, preferuje jednakże w środku).

Stworzyłem dwóch wykonawców z czego interesuje nas: DateTimeComputed.

Obaj wykonawcy dziedziczą po interfejsie IExecutor, to przez niego wykonawcy są zmuszeni do zaimplementowania metody Execute i właściwość Path.

I nasz wykonawca:

Wykonawca już robi co do niego należy, czyli zastępuje odpowiednie linie w xml edmx’a.

I na koniec metoda main:

 

Podsumowując, zyskujemy przejrzystość, prostotę przy dodaniu kolejnej strategii i możliwość łatwego przetestowania każdej strategii z osobna.

Mam nadzieję, że znalazłeś to czego szukałeś 🙂