Sposób podziału algorytmu na klasy.

0

Witam,
generuję proceduralnie zestaw pomieszczeń. Algorytm wygląda mniej więcej tak: dzielę określoną powierzchnię na mniejsze komórki, następnie w każdej umieszczam pokój i łącze przylegające do siebie pokoje korytarzami. Finalnie, każdy pokój i korytarz przechodzi przez x funkcji, które zapełniają go kolejno różnymi bzdetami.

Problemem jest jak podzielić generator. Gdyby to była jedna klasa, da mi potworka na ponad 5k linii kodu. Obecnie jest podzielona na podklasy jak "RoomCreator", "CorridorCreator", "CorridorConnector" i... wygląda to paskudnie, plus łamie zasady zarówno pojedynczej odpowiedzialności, jak i DRY. Trzecim pomysłem jest żeby każda klasa korytarz, pokój etc. zawierał metody tworzące go wewnątrz siebie. Ale to też nie jest zbyt eleganckie.

Po drugie, metody zapełniające pomieszcznenia zamiast umieszczać w klasie generatora, mam zamiar definiować jako funktory. Tylko w takim wypadku będę musiał stworzyć kilkadziesiąt klas, z której każda posłuży do stoworzenia tylko jednego obiektu. Nie za fajnie. Umieszczenie ich w jednej klasie ("Creator", ehh), stworzy kolejne monstrum w kodzie.

Lepsze jest już tworzenie klas kolosów, czy sztuczne wycinanie subklas żeby chociaż zbliżyć się do zalet obiektowości? Jakieś inne rozwiązanie? Każda sugestia na wagę złota. Pozdrawiam.

0

W jaki sposób łamiesz SRP i DRY przy podziale na RoomCreator, CorridorCreator, CorridorConnector? Dobrą intuicją wydaje się wydzielenie sobie obiektów, które zapełniają Twoje pomieszczenia. Możesz je zaimplementować na wiele różnych sposobów i trudno tutaj wskazać najlepszy bez większej liczby szczegółów (a i pewnie kod się zmieni z czasem). Pomieszczenia mogą udostępnić wszystkie informacje o sobie i to wypełniacze będa po nich chodzić i same kombinować. Możesz mieć wypełniacze, które są prowadzone za rączkę i z ich perspektywy nie ważne jaki to rodzaj pomieszczenia, widzą tylko skrawek podłogi i tam coś robią. Za rączke może prowadzić zarówno "kreator" jak i sam pokój, chociaż bardziej eleganckim wydaje się rozwiązanie, w którym pokoje nie robią za dużo same.

1 użytkowników online, w tym zalogowanych: 0, gości: 1