Pull to refresh
10
0
Владислав @vmchar

Game Developer

… но ведь он при подходе с фабриками не будет появляться в коде приложения за пределами Composition Root.

Получается, что сама фабрика зашита в контейнер, пусть и неявно.
Не могу представить ни одного сценария, когда увеличение использования фабрик плавно превращается в сервис-локатор. Это два совершенно разных паттерна.

Передача контейнера в фабрику в данном контексте выступает как первый шаг к тому, чтобы позволить себе передать контейнер в другие классы. Но ему и в фабрике не место.
Управление краткосрочными зависимостями по средством контейнера приведет к частому внедрению самого контейнера по множеству фабрик, которые вы используете, что приводит к более сильной завязке на код контейнера. И это приведет к тому, что вы никак не сможете ограничить применение контейнера корнем компоновки. Если контейнер начинает все чаще появляться в коде самого приложения это, в конечном итоге, приводит к тому, что у контейнера появится еще больше ответственностей, а также чревато плавным переходом от контейнера к локатору сервисов.
Я не утверждаю, что использование контейнера в 2-3 фабриках по проекту приведет все к бедственному состоянию, но это уже сигнал о том, чтобы задуматься
Во-вторых, если класс знает о фабрике, а фабрика знает о контейнере — это еще не означает что класс знает о контейнере. Да, явное использование классов из библиотеки означает что теперь нельзя так просто взять и сменить библиотеку, но SRP при этом не нарушается!

Того, что фабрика знает о контейнере уже достаточно, чтобы делать вывод о завязке на контейнер и о том, что контейнер начинает управлять кратко-срочными зависимостями, чего делать не должен.
Использование ITickable и IFactory также завязывает проект на контейнер, в силу того, что код этих интерфейсов реализован в коде Zejnect.
Касаемо ITickable — можно оставить интерфейс и его можно использовать без контейнера, но тогда нужна собственная реализация класса, который будет обрабатывать все ITickable
по их книгам не снимали книги.

Автор, исправьте пожалуйста
Тот факт, что изменения игнорируются используется еще и в Play Mode. Когда все данные сериализуются, вы можете изменять их пока включен Player Mode, а после выключения все изменения пропадают, так как объекты серилиализуются заново. В этом есть свое удобство или фича.
Для примера редактора уровней внутри Scene View можно рассмотреть редактор для 2d изометрии. Генерировать gameobject для поля, разбитый на тайлы, как на картинке

отслеживать клики внутри тайлов и «рисовать» на них нужные спрайты или объекты

Что касается создания собственных gizmo, то в качестве примера можно посмотреть статью где автор создал собственные gizmo для удобства перемещения объектов
Будет работать. Это к вопросу о том, что там скорее всего не C# рефлексия используется, а как-то обходится через с++. И скорее всего с Update/Start подобная техника используется.
Например при сборке проекта с рефлексией под iOS проект очень сильно раздуется, потому что сама платформа не может JIT. Тоже самое верно и с Generic'ами
IL2CPP использует AOT компиляцию, тогда как рефлексии требуется JIT. Так что скорее в этом замешан C++
Где-то в недрах документации было, что OnScene как и OnEditorGUI вызовутся только когда что-то измениться на SceneView и Editor соответственно. По этому они и не работают как Update, а сделано так исключительно для экономии ресурсов.
// Принудительно вызовет методы OnInspectorGUI
	EditorUtility.SetDirty(target);

Сейчас кстати данный метод может не сработать, так как поменялась система внутренней сериализации в Unity.
Отсюда и вытекает экономия ресурсов. Если бы onSceneGUI/OnInspectorGUI вызывались по 60 раз за кадр, то столько бы раз происходила сериализация редактируемого объекта во внутренний формат Unity, что крайне сильно может ударить по производительности.
А от EditorUtility.SetDirty(target); советуют переходить к использованию SerializedProperty и даже грозят сделать SetDirty depricated
Конечно, используйте. По поводу автоматизации у меня тоже есть пару набросков. Если есть еще какие-то вопросы, обращайтесь

Information

Rating
Does not participate
Location
Карелия, Россия
Date of birth
Registered
Activity