ASMDEF в Unity
*Представим коллектив, где в отделах нет начальников и сотрудники между отделами спокойно могут общаться, чтобы решать какие-либо рабочие задачи. Например, разработчику нужно добавить картинку персонажа в игру, он идет к художнику, художник. Художник не знает, что надо нарисовать и идет к геймдизайнеру, геймдизайнер отдает тз, художник рисует, а разработчик вставляет в проект.
Теперь представим, что в коллективе 10 разработчиков, 10 художников и 10 геймдизайнеров. И вот разработчик идет к художникам, но не знает к какому идти и идет к случайному, а у того уже задач на месяц вперед, да и рисует он не то что надо, но разработчик этого не знает и просто ждет. Художник берет задачу, идет к ГД, тот понимает, что нужно внести правки идет к разработчику и круг повторяется.
Резюмируем: все сотрудники отдела имеют доступ ко всем другим сотрудникам.
А теперь добавим в наш коллектив начальников.
Теперь сотрудник когда нуждается в чем-то идет к своему начальнику, чтобы тот обеспечил его всем необходимым. Начальники могут общаться между собой. У начальников есть свои отделы из начальников. (например 5 команд разработки в каждой по начальнику команды и эти начальники представляют собой еще одну команду).*
К чему это я, ASMDEF позволяет разделить код между собой на независимые "кабинеты", в которых кипит своя жизнь, которые сами могут принимать небольшие решения и отдавать задачи и вся компания имеет малую связанность между отделами.
Плюсы Asmdef:
- Упорядочивание и разделение ответственности
- Запрет циклических зависимостей
- Независимая компиляция - перекомпилируются только те asmdef, в которых были изменения
———————
Рассмотрим на примере моего проекта
asmdef CORE
В ней представлен код, который является фундаментальным - например, базовая реализация машины состояний. В теории, эту папку можно взять и забрать в другой проект
Так как эта asmdef содержит фундамент, то и доступ к этой asmdef должен быть у всех других
asmdef GLOBAL
Здесь лежит все то, что используется во время работы всего проекта, например таймеры, сохранения, некоторые конфиги и др.
Эта asmdef тоже доступна почти всем другим asmdef
asmdef META и GAME
Здесь логика разделена на саму игру (кор-геймплей) и мета механики (меню, магазин и др)
META ничего не знает о GAME и наоборот
GLOBAL ничего не знает о META и GAME, но META и GAME знают о GLOBAL
Таким образом IDE будет бить нас по рукам, когда мы решим согрешить запутать код, а компиляция будет происходить значительно быстрее
Как-то так, провел два дня (делил на папочки проект)😄