Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Szkielet programu zaproponowany przez @efiku #5

Open
event15 opened this issue Oct 6, 2015 · 1 comment
Open

Szkielet programu zaproponowany przez @efiku #5

event15 opened this issue Oct 6, 2015 · 1 comment
Labels

Comments

@event15
Copy link
Member

event15 commented Oct 6, 2015

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 😄 ) , 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.

@efiku
Copy link
Member

efiku commented Oct 6, 2015

@event15 zrobiłem update.

@efiku efiku changed the title Szkielet programu zaproponowany przez @efik Szkielet programu zaproponowany przez @efiku Oct 6, 2015
@efiku efiku added the Idea label Oct 6, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants