Nicloay писал(а):Lailore писал(а):Хм, вот например ваш синглтон
Используется csharp
//В Installer
#if UNITY_STANDALONE
Container.Bind<IInputController>().ToSingle<DesktopController>();
#elif UNITY_PS4
Container.Bind<IInputController>().ToSingle<JoystickController>();
#endif
// А уже в компонентак
[Inject] private IInputConroller _inputController;
// И все, компоненту по барабану, какой именно контроллер, и он не задумывается на какой платформе работает, + при написании тестов, можно вообще свой мок запихать, что бы независимо от джостика давать события компоненту
Слушай.. а ты случайно главу про компоненты в книжке которую привел не пропустил, лапша из классов и файлов ничем не отличается от лапши в одном классе. Паттерны конечно красивая и нужная вещь, но если после этих паттернов гейм дизайнер не сможет нужное поведение какомунибудь игровому объекту и будет требовать участия программиста, это как еще один показатель неправильного использования паттернов в контексте unity.
И да.. после прочтения книжки о паттернах, надо читать по возможности антипаттерны. Приведенную твою книжку я только начал просматривать, но даже там указывается что ребята, если можете использовать функциональщину используйте ее. Про Observer и вовсе говорит что он устаревший и лучше вместо горы классов использовать event-ы.
Вобщем без фанатизма имхо.
Гейм дизайнер не устанавливает контроллер ввода игрока. Естественно никто компоненты Unity3d не отменяет.
Используется csharp
лапша из классов и файлов ничем не отличается от лапши в одном классе
Что в вашем понимании "лапша из классов"? И да, при использовании DI, лапша более предпочтительно, если я правильно вас понял. Принцип открытости/закрытости. Принци единой обязанности.
если можете использовать функциональщину используйте ее
можете указать место?
Observer и вовсе говорит что он устаревший и лучше вместо горы классов использовать event-ы.
Что то я вас вообще не понял. Если вы про ключевое слово event в c#. То это и есть тот самый паттерн. Или что вы имели ввиду? Можете указать место, где об этом говорится?
Или вы про центральную шину событий? Если да, то это как раз похоже на юнитевское SendMessage. Я все так же ненахожу про устаревшего обсервера. Паттерн observer устареет, когда устареет событийная архитектура. А конкурентов или аналогов я пока не вижу и придумать не могу. Кстати, юнити помоему отходит от SendMessage, в пользу интерфейсов, которые обрабатывают конкретные события(новый GUI). В любом случае центральная шина событий это лишь один из способов бороться со сложностью и повысить гибкость кода. Она не универсальна.
P.S. насчет спагетти методов. Обычно это сложный для понимания, связанный, не расширяемый, со множеством мест швов модификации и источников ошибок, плохо тестируемый, со множестом обязанностей код. В общем мрак и уныние. Основная проблема в программировании это сложность. Спагетти методы делают все, что бы увеличить сложность.