Update @efiku:
Jak zapewne wiemy kod który obecnie refaktoryzujemy to gra Tic tac Toe.
Co możemy się dowiedzieć?
Zobaczmy na to pod kątem bardziej obiektowym. Każdy obiekt , nie może zmienić swojego stanu. Wg zasad ( walidator ) gracz nie może zrobić więcej niż jednego ruchu. Wynik sprawdzany jest podczas wykonania ruchu przez gracza. Zwróćmy uwagę na to, że w taką grę można zagrać na kartce / ścianie / komputerze - konsolowe , graficznie , ale zasady gry się nie zmieniają. Istnieją takie cuda jak plansza, gracz ( którego bym całkowicie odseparował od systemu , interakcja człowieka z systemem to problem :smile: ) , zasady które określają wygraną.
Chciałbym krótko machnąć szkic aplikacji, w zasadzie to warstwy domenowej?
Obecnie jestem jeszcze na etapie studiowania DDD, ale może dobrze rozumiem...
To jest tylko i wyłącznie moja propozycja, nie jest to w stylu: Tak macie robić.
Ta warstwa powinna być odseparowana od całej aplikacji w taki sposób, aby dało się testować ją z przeróżnymi kombinacjami.
Wobec tego do dyspozycji możemy mieć następujące VO:
Jak wiemy, VO raz stworzone nie może być już modyfikowane.
VO - Item - klasa finalna posiadająca w konstruktorze tylko 1 parametr mianowicie nazwa tego obiektu
VO Position, klasa finalna która w konstruktorze przyjmuje 2 argumenty , pos1, pos2
VO - Field , finalna klasa która w konstruktorze przyjmuje 2 parametry. Parametr pierwszy Position, drugi Item.
Oraz Repozytorium:
klasa BoardRepository przechowująca kolekcję Field.
metody , find, add.
Cała ta warstwa zajmowałby się tylko dodawaniem do kolekcji / zwracaniem danych z kolekcji na podstawie jakiś kryteriów.
Warstwa aplikacji
Dodawania ( najniższa )
W momencie gdy dostanie zielone światło z warstwy wyżej dodaje do planszy obiekt o określonych kordach.
Walidacji
W tej warstwie mógł by się znajdować walidator z tym magicznym kwadratem.
Odwołujący się do kolekcji z planszy
Walidacja następuje na podstawie danych z warstwy wyżej
Sterująca ruchem
Otrzymuje dane na temat planowanego ruchu z warstwy wyżej , wołając o sprawdzenie do warstwy niżej.
Zielone -> Wola dodawanie.
Czerwone -> Wola generator widoku dla remisu / porażki / zwycięstwa
Gracz
Gracz na podstawie warstwy wyżej otrzymuje kordynaty gdzie chce postawić kółko / krzyżyk i obiekt item
Widok
Konsola / Graficznie
: Graficznie tutaj pasowałoby pakować np SFML i nigdzie indziej.
Update @efiku: Jak zapewne wiemy kod który obecnie refaktoryzujemy to gra Tic tac Toe. Co możemy się dowiedzieć? Zobaczmy na to pod kątem bardziej obiektowym. Każdy obiekt , nie może zmienić swojego stanu. Wg zasad ( walidator ) gracz nie może zrobić więcej niż jednego ruchu. Wynik sprawdzany jest podczas wykonania ruchu przez gracza. Zwróćmy uwagę na to, że w taką grę można zagrać na kartce / ścianie / komputerze - konsolowe , graficznie , ale zasady gry się nie zmieniają. Istnieją takie cuda jak plansza, gracz ( którego bym całkowicie odseparował od systemu , interakcja człowieka z systemem to problem :smile: ) , zasady które określają wygraną.
Chciałbym krótko machnąć szkic aplikacji, w zasadzie to warstwy domenowej? Obecnie jestem jeszcze na etapie studiowania DDD, ale może dobrze rozumiem... To jest tylko i wyłącznie moja propozycja, nie jest to w stylu: Tak macie robić.
Ta warstwa powinna być odseparowana od całej aplikacji w taki sposób, aby dało się testować ją z przeróżnymi kombinacjami.
Wobec tego do dyspozycji możemy mieć następujące VO: Jak wiemy, VO raz stworzone nie może być już modyfikowane.
Oraz Repozytorium:
Cała ta warstwa zajmowałby się tylko dodawaniem do kolekcji / zwracaniem danych z kolekcji na podstawie jakiś kryteriów.
Warstwa aplikacji
Dodawania ( najniższa )
W momencie gdy dostanie zielone światło z warstwy wyżej dodaje do planszy obiekt o określonych kordach.
Walidacji
W tej warstwie mógł by się znajdować walidator z tym magicznym kwadratem. Odwołujący się do kolekcji z planszy Walidacja następuje na podstawie danych z warstwy wyżej
Sterująca ruchem
Otrzymuje dane na temat planowanego ruchu z warstwy wyżej , wołając o sprawdzenie do warstwy niżej. Zielone -> Wola dodawanie. Czerwone -> Wola generator widoku dla remisu / porażki / zwycięstwa
Gracz
Gracz na podstawie warstwy wyżej otrzymuje kordynaty gdzie chce postawić kółko / krzyżyk i obiekt item
Widok
Konsola / Graficznie : Graficznie tutaj pasowałoby pakować np SFML i nigdzie indziej.