Проблема В
последнее время я много читал о том, что Singletons - это плохо, и как лучше внедрить зависимости (что я понимаю как «использование интерфейсов»). Когда я реализовал часть этого с callbacks / interfaces / DI и придерживаясь принципа разделения интерфейса, я оказался в полном беспорядке.
Зависимости родителя пользовательского интерфейса, где в основном объединены родительские элементы всех его дочерних элементов, поэтому чем дальше вверх по иерархии был элемент пользовательского интерфейса, тем более раздутым был его конструктор.
На вершине иерархии пользовательского интерфейса находился класс Application, содержащий информацию о текущем выборе и ссылку на 3d-модель, которая должна отражать изменения. Класс приложения реализовывал 8 интерфейсов, и это была только пятая часть продуктов (/ интерфейсов)!
В настоящее время я работаю с одноэлементным объектом, содержащим текущий выбор, и элементами пользовательского интерфейса, имеющими функцию для обновления самих себя. Эта функция стекает по дереву UI и элементам UI, а затем обращается к текущему выделенному синглтону по мере необходимости. Код кажется мне чище таким образом.
Вопрос
Может ли синглтон подойти для этого проекта?
Если нет, есть ли фундаментальный недостаток в моем мышлении и / или реализации DI, который делает его таким громоздким?
Дополнительная информация о проекте
Тип: корзина для покупок с квартирами, со свистками
Размер: 2 человеко-месяца для кода и пользовательского интерфейса.
Обслуживание: обновлений нет, но может быть «версия 2.0» позже.
Среда: Использование C # в Unity, который использует Entity Компонентная система
Практически во всех случаях взаимодействие с пользователем запускает несколько действий. Например, когда пользователь выбирает элемент
- часть пользовательского интерфейса, показывающая этот элемент и его описание, должна быть обновлена. Для этого также необходимо получить некоторую информацию от 3d-модели, чтобы рассчитать цену.
- дальше пользовательский интерфейс, общая общая стоимость должна быть обновлена
- соответствующая функция в классе на 3d-модели должна быть вызвана для отображения изменений