Вы создали своего рода объект менеджера, который обрабатывает «состояние» приложения, управляя коллекцией объектов.
Ссылка на этот менеджер (который близок к одиночному в вашем приложении) передается конструкторам объектов вашего приложения. Это создает своего рода внедрение зависимостей с изюминкой, а именно, что фактические зависимости извлекаются посредством дополнительного косвенного обращения при использовании.
Я бы сказал, что хороший дизайн или нет, во многом зависит от модели вашего приложения. Вместо открытых членов я бы использовал методы получения для получения ссылок, дающих вам возможность создания по требованию.
Если ссылки ваших приложений стабильны с точки зрения построения (т. Е. Объекты, которые хранит ваш менеджер, не меняются в течение жизненного цикла приложения), вы можете изменить свои классы, чтобы использовать ссылку менеджера, переданную при конструировании, для получения ссылок на объекты им нужно использовать их для инициализации атрибутов ссылки на объект.
Большая часть наиболее оптимального дизайна зависит от модели, лежащей в основе вашего приложения. Следует обратить внимание на чрезмерно статичное определение, создание зависимостей между объектами, свойства жизненного цикла, такие как создание объектов по требованию и создание при инициализации приложения, и количество ссылок между объектами (если ваш менеджер ссылается на каждый другой объект в вашем приложении. неправильно.)
Основываясь на информации, которую вы нам предоставили, я не считаю, что ваш дизайн - это плохая практика (всегда можно вносить улучшения в любую кодовую базу, не создавайте собственную движущуюся цель, сохраняя рефакторинг в попытке «усовершенствовать» ваш код). )