Я встречаюсь с ситуацией, когда компонент A должен знать о состоянии компонента B, когда A запрашивает выполнение определенных действий (например, если меню редактирования переключено, действие сохранения на кнопке сохранения не должно выполняться). Мое приложение структурировано как дерево с вложенными компонентами.Что такое хороший шаблон для доступа к состояниям других компонентов?
Я пробовал передать все компоненты, которые мне нужны, в конструктор других компонентов. Я считаю, что это довольно утомительно, когда я добавляю больше компонентов в приложение, я должен пройти их до конца. Кроме того, некоторые компоненты создаются под одним и тем же конструктором, но они должны знать друг о друге. Я не могу передать компонент A и B друг в друга, так как мне нужно их инстанцировать по порядку.
Я также попытался использовать систему событий для сигнализации между компонентами. (Шаблон наблюдателя?) Кажется, что это скорее излишний, а не предназначенный для такого использования.
3-я вещь, которую я пытаюсь использовать Singleton через инъекцию зависимости. Компоненты регистрируются в init для провайдера, и поставщик может быть введен для обеспечения доступа к другим компонентам.
3-й подход является самым легким и работает для меня. Но я google, что Синглтон не рекомендуется, поскольку это просто глобальная переменная, и он запутывает код. Но игровой движок Unity, похоже, имеет то же самое (FindComponentByTag). Какова общая практика для этого?
Я вижу. Таким образом, контроллер будет иметь доступ ко многим моделям по своему усмотрению. При обновлении модели нажимают изменения на своих подписчиков (просматривать компоненты). Раньше я использовал библиотеки MVC, но никогда не думал, что в этом случае мне придется реализовать его, ха! Спасибо за ответ. – Flmhdfj