Hard Training: Architektura projektu

We wpisie “Hard Training: Podstawowe wymagania” opisałem, jak program ma mniej więcej wyglądać z punktu widzenia użytkownika. Dzisiaj napiszę kilka słów na temat obecnej budowy programu z punktu widzenia programisty.

Gdy rozpoczynałem projekt podzieliłem go w taki sposób w jaki widzi go (mniej więcej) użytkownik, tzn. istniała warstwa dostępu do danych, oraz warstwa danego modułu programu. Było to podejście zakładające że pozwoli(w pewnym stopniu) wypracować sposób interakcji między poszczególnymi klasami, przestrzeniami nazw itd. Jako pierwszy postanowiłem napisać moduł logujący, z racji najprostszej budowy, dzięki czemu dobrze wpisywał się we wspomniane założenia.
Before

Następnie, po napisaniu loggera, podzieliłem aplikacje na trzy warstwy:  UI: Część związaną z interfejsem użytkownika i wszystkim co się z nim wiąże; Services: odpowiedzialne za logikę , a także za komunikację między bazą danych a widokami modelu; I ostania: Database: jak sama nazwa wskazuję jest to dziedzina Entity Framework’a 🙂
After

W tej chwili UI obejmuje dwa projekty, jeden zawiera widoki oraz punkt wejścia aplikacji i rejestrację typów dla kontenera IoC, a drugi widoki modelu. Pierwszy z nich jest zależny od wszystkich pozostałych projektów (z racji bycia tzw. Composition  Root).  Wydaje mi się, że z racji braku logiki w widokach, nie jest to rozwiązanie bardzo złe, ale być może postaram się coś z tym zrobić ;).

Services jest również podzielone na dwa projekty. Jeden zawiera same interfejsy, a drugi ich implementację (zgodnie z The Stairway). Być może w przyszłości ta część ulegnie kolejnemu podziałowi, na serwisy z logiką aplikacji, i na serwisy wspomagające pracę z bazą danych (komunikujące się z repozytorium).

Ostatnia część, Database składa się z tylko jednego projektu, który zawiera model bazy i repozytoria. Także tutaj w przyszłości dokonam separacji.

W tej chwili diagram zależności (dla przejrzystości wyłączając testy) wygląda w taki sposób:
After

Jak widać, w tej chwili widoki modelu są jeszcze zależne od implementacji serwisów, ale to tylko do następnego commita. 😉
W akapitach powyżej często pojawiało się stwierdzenie “w przyszłości podzielę” itp. . Owa przyszłość nastąpi niebawem, podczas prac nad kolejnym niewielkim modułem: Danych użytkownika, o czym więcej już wkrótce 🙂

Dodaj komentarz

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