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.