Cześć
mam zastany, stary kod, który ma referencje cykliczne
poglądowo kod wyglada tak:
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
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ę