Jestem programistą (gra jako hobby) i widziałem, jak korzystam z następującego paradygmatu kilka razy. (Zarówno w tworzeniu architektury serwera, jak i przy tworzeniu gier wideo.) Wydaje się to naprawdę brzydkie, ale nie wiem, jak się obejść. Podam przykład w grze, ponieważ ostatnio to zauważyłem. To jest gra RPG, nad którą pracuję. Za każdym razem, gdy rozpoczyna się bitwa, CombatEngine tworzy dwie partie Combatants. Każdy Combatant konfiguruje obiekt ArtificialIntelligence, który jest skojarzony z danym bojownik, który jest odpowiedzialny za dyktując ruchów dla graczy, które nie otrzymują wyraźne polecenie:Weird reference passing in class construction
public class Combatant {
ArtificialIntelligence ai = null;
public Combatant()
{
// Set other fields here.
this.ai = new ArtificialIntelligence(this);
}
}
Oto co mi się nie podoba: pole wewnętrzne (ArtificialIntelligence) bierze Combatant podczas budowy, ponieważ potrzebuje niektórych pól Combatant, aby dyktować odpowiednie działania. Tak więc, dla wygody, utrzymuję odniesienie do kombatanta przekazanego jako argument do obiektu Sztuczna Inteligencja, ale ten obiekt zawiera odniesienie do samego obiektu ai! Tworzy to dziwną rekurencję, ale nie wiem, jak to obejść. Obiekt sztucznej inteligencji potrzebuje dużej ilości pól, które są specyficzne dla walczącego, dlatego właśnie przeszedłem przez cały obiekt, ale nie podoba mi się, jak obiekt zawiera odniesienie do pola ai, które jest zawarte w overying fightant pole, które znajduje się w overliście klasy ai. Czy to zła praktyka, czy po prostu nad tym się zastanawiam?
Czy otrzymujesz błąd stackoverflow? Wątpię w to, a jeśli nie, to nie ma tu żadnej rekurencji, tylko przekazanie referencji. Myślę, że masz tutaj problem. –
Woops, z zawodu jestem matematykiem, więc brakuje mi niektórych terminów. Masz rację, to tylko referencja. Czy nadal będzie to uważane za problem? Czy nie jest złą praktyką zagnieżdżanie odniesień w tym formularzu? I żeby odpowiedzieć na twoje pytanie, nie dostaję żadnych błędów. Po prostu pomyślałem, że to źle wygląda i chciałem zdobyć opinie. – Sal