Refaktoryzacja inicjalizacji encji | Ilaro.Admin

Jak było?

Do tej pory inicjalizacja atrybutami była zaszyta w logice encji, co oczywiście nie powinno mieć miejsca. Niektóre rzeczy były inaczej inicjalizowane używając atrybutów a inaczej używając fluent konfiguracji.

Kolejną złą rzeczą było inicjalizowanie obiektu od razu po jego utworzeniu, co powodowało, że w metodzie Admin.Initialise()  musiałem wykonywać dodatkową konfiguracje, ponieważ niektóre rzeczy zależą od konfiguracji innych rzeczy.
Na przykład jeśli nie został określony template edycji to jest on określany automatycznie, co jednak zależy od kilku innych rzeczy, taki jak typ zmiennej, data type zmiennej (Html, Password, itd.), a także uwzględnia czy zmienna jest kluczem obcym.

Dodatkowym problemem byłoby to, ze jeśli chciałbym dodać nowy sposób inicjalizacji, na przykład czytanie z pliku xml lub json, to stopień komplikacji i zależności tym bardziej by wzrósł.

Czemu tak było?

Taki stan rzeczy wynikł z tego, że pierwotnym przeznaczeniem Ilaro.Admin były tylko dwa projekty, którymi się zajmowałem.
Początkowo używałem tylko konfiguracji atrybutami. Zależało mi jak najszybszym stworzeniu działającej wersji z minimalną ilością funkcji.
Następnie zamiast zrobić refaktoryzacje, dodawałem kolejne funkcje, co spowodowało, że projekt miał kiepską architekture.

Jak jest?

Podczas fluent konfiguracji wszystkie dane konfiguracyjne zapisywane są do klasy CustomizersHolder a następnie wykorzystywane podczas inicjalizowania panelu administracyjnego ( Admin.Initialise() ).
Konfigurowanie atrybutami jest teraz etapem fluent konfiguracji.

Wartości wszystkich atrybutów używanych przez Ilaro.Admin zapisywane są do wspólnej klasy CustomizersHolder .
Dzięki temu możemy nadal używać równocześnie obydwu metod konfiguracji.

Mając tak przygotowaną inicjalizacje, w prosty sposób można przygotować konfigurowanie encji z pliku. Wystarczyłoby zdeserializować plik xml/json i dodać odpowiednią metodę do do fluent konfiguracji, na wzór tej używanej dla atrybutów.
Na razie nie planuje dodanie takiej funkcjonalności, a jeśli miałbym to robić to pomyślałbym nad jakąś bardziej zmyślnym sposobem niż po prostu dodanie metody czytającej z pliku do fluent konfiguracji.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *