Циклическая зависимость в C#, это дизайн запах?
class A
{
public B b { get; set; }
public void Ma()
{
b.Mb();
}
}
class B
{
B()
{
A a = new A();
a.b = this;
}
public void Mb()
{
}
}
в данном сценарии я создаю объект класса A в классе B и передаю текущий объект B в A.
У меня 3 вопроса
1. Есть ли циклическая зависимость между обоими классами?
2. Это дизайнерский запах?
3. если это дизайнерский запах, как решить его?
1 ответ
Решение
Я думаю, что большинство проблем лучше решать, избегая циклических зависимостей - если это возможно.
Как A
заинтересован только в Mb
функция B
а не в самом объекте, простое решение вашей проблемы без циклических зависимостей будет:
class A
{
public Action BAction { get; set; }
public void Ma()
{
if (BAction != null)
BAction();
}
}
class B
{
B()
{
A a = new A {BAction = Mb};
}
public void Mb()
{
}
}