prośba o pomoc w refaktoryzacji - wyeliminowanie referencji cyklicznych

prośba o pomoc w refaktoryzacji - wyeliminowanie referencji cyklicznych
MU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 104
0

Cześć
mam zastany, stary kod, który ma referencje cykliczne

poglądowo kod wyglada tak:

Kopiuj

public class MainObject
{
public SubObject1 _so1 {get; set;}
public SubObject2 _so2 {get; set;}
}

public class SubObject1 
{
    public SubObject1(MainObject mo){}
}

public class SubObject2
{
    public SubObject2(MainObject mo){}
}

// potem np w kodzie robione jest takie coś
var mo = new MainObject();
mo.SubObject1 = new SubObject1(mo);
mo.SubObject2 = new SubObject2(mo);

Chciałbym zrefaktorowac kod, aby była ścieżka bez referencji cyklicznej
OK najprościej mozna by olać dać null albo dodać konstruktor bezparametrowy, ale to wprowadza trochę zamieszania, bo to korzysta nie wiadomo kto jeszcze z tych klas i można kłopotu narobić

myślałem nad czymś takim - taki dekorator

Kopiuj
public class SubObject1 
{
    public SubObject1(){}
}

public class SubObject1Ex
{
    private readonly SubObject1 _so1 = new SubObject1();
    public SubObject1Ex(MainObject mo){}
}

ale takie podejście to jest rozjazd danych - trzeba by jakoś utrzymywać spójnosć między klasą EX i nie EX, to lekarstwo gorsze od chorby

może wspólny interfejs ISubObject1, który by był implementowany przez SubObject1 i SubObject1EX, a w miejscach gdzie dotychczas jest klasa byłby interfejs
i co tam kto doda to doda?

z góry dziękuję za poradę

AK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3561
0

Referencja cykliczna MZ nie jest złem absolutnym w swojej istocie.
Dla oceny dużo zależy od kontekstu.
To co mi się nasuwa (nieuporządkowana kolejność myśli) bym wybaczył, gdyby jedna z tych klas była wewnętrzną (w szerokim sensie tego słowa).

r.cykliczną ja osobiście dopuszczam z klasą wewnętrzną.

AreQrm
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Londyn
  • Postów: 873
1

Może napisz co chcesz w ogóle osiągnąć rzeczywistym kodem i wtedy da się to jakoś ogarnąć sensownie albo uzasadnić czy nie warto zostawić w spokoju?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.