У нас была точно такая же проблема около 6 месяцев назад, но по другой причине.У нас было около 20 «обычных» классов и один гигантский класс размером с Юпитер, который делал много, слишком много, и его нужно было разбить.
На самом деле нам нужны ДВА ребенка, в дополнение к родителю, соба ребенка в отношении 1: 1 к родителю.
Первая попытка (которая сработала) использовала шаблон старой школы для передачи ссылки «this» в конструктор каждого дочернего элемента, изатем используйте метод .Parent для перехода назад.Это было кошмаром из-за проблем с GC, и мы искали лучшее решение в короткие сроки.
Лучшее решение (которое используется до сих пор) - просто принять ссылку на тип класса родителя в методахдети, которым нужно было запросить родителя.Это сработало фантастически, GC понравилось, и все было реализовано и освобождено правильно, как и ожидалось.Код более управляем, и намного более организован, и мы теперь очень рады, что вложили средства вовремя, чтобы сделать это.
Итак, это будет моя рекомендация:
Parent
|
+-Child1
|
+-Child2
С помощью методов дочерних объектов, принимающих ссылку на родительский класс только в тех методах, которые в этом нуждаются.
На самом деле это очень похоже на способ разработки ADO.Net с независимыми объектами, которые принимают ссылки на каждый из них.другие в методах, где они необходимы.