Zadanie domowe z DNA (Torfowisko)

Po miesiącu od pierwszego commita, uznałem, że czas  coś jednak zamieścić na blogu, a jest ku temu sposobność.

Ostatnim etapem Event Stormingu jest Design Level po którym następuje „kodzenie”. W moim przypadku nie było inaczej, aczkolwiek kod powstał w oparciu o jeden tylko Bounded Context czyli „Rejestracje użytkownika” (obrazek na githubie).

Przykład ten jest swoistym poligonem doświadczalnym na którym testuje różne koncepcje. Jedną z tych koncepcji był przełącznik między bazami, który z pobocznego brancha wpadł do mastera (po zatwierdzeniu przez komitet centralny).

Opis

Po zamokowaniu repozytorium przyszedł czas na podpięcie bazy, postanowiłem podłączyć bazę „in memmory”, a kiedy to było gotowe również bazę „in file”. Z pomocą przyszedł SQLite, był to mój dziewiczy rejs z tym typem bazy (zawsze robiłem na MS SQL-u). Konfiguracja okazała się dosyć prosta ale internet musiał pomóc.

Rozwiązanie

Pod repozytorium usera podpięta została jeszcze jedna warstwa w formie klasy abstrakcyjnej, która w swoich konstruktorach ma wybór do jakiej bazy się wpinamy oraz jaką tabelę chcemy tam wrzucić. W pierwszym podejściu miało być więcej tabel, na tę chwilę jest tylko jedna.

Po za konstruktorami w klasie tej są jeszcze dwie metody getInsertQuery oraz AddUser_ToBase.Parametrami konstruktora są dwa Enum-y

Klasa ta we właściwościach ma interfejs który wiązany jest w konstruktorze klasy abstrakcyjnej z (w zależności od wybranej bazy)  TestDataBase_InMemmory() -baza w pamięci lub TestDataBase_InFile() baza w pliku.

W drugim konstruktorze, w zależności od tego czy baza jest w pamięci czy pliku wywoływane jest „dropowanie tabeli” (baza w pliku).

Wywołanie w repozytorium wygląda następująco

Problemy

Największym problemem są testy, które na tę chwilę, przechodzą tylko z bazą „w pamięci”. Przy przełączeniu na bazę plikową świecą na czerwono gdyż nie jest zachowana unikalność klucza głównego (insert tego samego klucza). To wymaga poprawy, myślę  że metoda Add_UserToBase powinna być rozbudowana o sprawdzenie unikalności (generacje ID) oraz o pilnowanie unikalności na innych kolumnach.

Wnioski

Czy opłaca się na dłuższą metę wykonywać takie przełączniki? nie mam pojęcia nigdy tego nie stosowałem nawet testowo, a tym bardziej na produkcji, na pewno warstwa pod repozytorium powinna być bardziej rozbudowana, a tym samym poziom komplikacji znacząco wzrośnie. Być może  wszystko zależy od kontekstu. Torfowisko traktuje jak „poligon doświadczalny” więc pozwalam sobie na różne wariacje.

Linki