Czy tworzę klasę kraju, która zawiera kilka miast?
Pewnie.
Czy miasta zawierają wiele klas budynków, większość zawiera klasy ludzi?
Pewnie.
Czy stworzę klasę znajdującą ścieżkę, do której gracz będzie mógł się poruszać?
Pewnie.
Wszystko, co zasugerowałeś powyżej, wydaje się rozsądne. Na dłuższą metę może nie być to dla ciebie najlepszy sposób, ale to dobrze. Oczywiście ma to dla ciebie sens, ponieważ jest to model organizacyjny, który pierwszy raz do ciebie przyszedł. Ważne jest, aby wziąć to i rozpocząć od wdrożenia. Pozwoli ci to zarówno zacząć, jak i przejść przez ten początkowy „paraliż projektowy”, który często nęka programistów na początku zadania, i (jeśli okaże się, że jest w jakiś sposób wadliwy) nauczy Cię czegoś o zaletach i wadach tego szczególnego podejścia do projektowania.
Naturalnie wziąłeś pojęcia do głowy i pogrupowałeś je w kod zgodnie z kilkoma prostymi regułami:
- Czy ta koncepcja różni się znacznie pod względem zachowania lub danych od innych obiektów, które już posiadam? (Kraje i ludzie dzielą bardzo niewiele, jeśli w ogóle, znaczących danych lub zachowań, dlatego powinny być reprezentowane przez różne typy w grze).
- Czy będę musiał nawet w znaczący sposób manipulować tą koncepcją w kodzie (jeśli Twoja gra dotyczy poszczególnych osób, możesz potrzebować tej
Person
klasy, ale jeśli gra troszczy się tylko o nich łącznie, tak jak we wcześniejszych wersjach SimCity, ty może nie potrzebować tego typu ani instancji tego typu, aby utworzyć mapowanie populacji miasta w skali 1: 1 ( int populationCount
może wystarczyć).
- Czy ta koncepcja wymaga stanu ? Jeśli tak, to powinien być jakoś enkapsulowany, co pozwala mi przechowywać ten stan (klasę), a nie kilka darmowych funkcji. (Implementacja odnajdywania ścieżek nie ma analogicznego obiektu w świecie rzeczywistym, ale wymaga śledzenia danych, takich jak węzły na mapie, które już rozważał, i lepiej to zrobić za pośrednictwem klasy niż przez przechowywanie ich w wiązce ukrytych globałów i wykonywanie funkcji wolnostojących).
Odpowiedzi na te pytania, choć proste, mogą być bardzo przydatne, gdy próbujesz zdecydować, czy i jak przekształcić koncepcję mentalną w kod źródłowy. Możesz także przeczytać o SOLIDNYCH zasadach projektowania obiektowego .
Zwróć uwagę, że sugestia systemu encji / komponentu zawarta w komentarzach jest również poprawnym podejściem, chociaż unikałbym jej tutaj, chyba że zmienisz zakres projektu na mniejszy (po prostu dlatego, że podejmowanie dwóch nowych, dużych wyzwań w jednym projekcie może być zbyt zniechęcającym i może osłabić korzyść edukacyjną, którą w innym przypadku otrzymalibyście, skupiając się tylko na jednym). W modelu zorientowanym na komponenty „typ” w powyższych pytaniach staje się bardziej niejawny: nie konkretny typ w kodzie, ale typ niejawny zdefiniowany przez kolekcję komponentów, które tworzą byt. Mogą obowiązywać te same zasady przewodnie.