H360ru / araxxes

Godot Online Turn Based Strategy
https://araxxes.com/play
GNU General Public License v3.0
3 stars 1 forks source link

Небольшие идеи по рефакторингу #41

Open Germenzi opened 3 years ago

Germenzi commented 3 years ago

Синглтон Global слишком загружен, предлагаю разделить его на части. От глобального твининга вообще избавиться. Для звуков создать библиотеку файлов звуков как синглтон, где все звуки загружаются через прелоад. Создать еще один синглтон для проигрывания звуков с различными методами.

В файл с настройками также предлагаю вынести все настройки до единой, а не расчленять их на несколько: https://github.com/H360ru/araxxes/blob/ec24e88077c38957436cceda9d5a7ad6ff45db8e/addons/Autoload/SettingsSaveLoad.gd#L49-L70 Тут, например, этот метод обращается к глобалу и меняет его настройки. Синглтон Global вообще по идее не для этого, он для удобного взаимодействия объектов с файлами и объектами. Все настройки, на мой взгляд, должны быть в одном синглтоне.

Так, например, в модуле test_unit.gd загружается звук SOUND, его по хорошему надо бы вынести в глобальный синглтон со звуками, по типу описанного мной ранее.

Также не понимаю зачем "аддон логики меню". Почему нельзя просто все сделать через сцены? Например одна нода Control как родитель издает нужные сигналы от кнопок, которые ей же и передают сигнал о нажатии. Такие высокоуровневые сигналы упростят и разработку, и создание меню.

Все вышеупомянутое мной, на мой взгляд, создает спагетти-код. Куча каких то посредников, хочется все как то прозрачнее. По моему пока идет ненужное усложнение. Понимаю, что это сделано с перспективой на будущий огромный проект, однако сейчас это лишнее. Опять же, на мой взгляд.

Про огромное кол-во закомментированных кусков кода вообще молчу. Я не удаляю намеренно, вдруг что то еще нужно. Лучше от них как можно скорее избавиться. Даже нашел полностью закомментированный файл.

Получилось достаточно сумбурно, но думаю мысль ясна.

alex7850 commented 3 years ago

Звуки

Для звуков создать библиотеку файлов звуков как синглтон, где все звуки загружаются через прелоад. Создать еще один синглтон для проигрывания звуков с различными методами.

Уже есть весь этот функционал, но эту сторонную кривую библиотеку дофига рефакторить придется, кстати. Неплохо бы вообще под нее отдельное обсуждение создать.

Так, например, в модуле test_unit.gd загружается звук SOUND, его по хорошему надо бы вынести в глобальный синглтон со звуками, по типу описанного мной ранее.

Аналогично все так и подключим, просто руки не дошли глобал перелапатить. (Ну и, конечно, это просто скрипт потыкать новую для меня библиотеку)

Рефакторинг скриптов меню

От глобального твининга вообще избавиться.

В каком смысле глобального? Ты вот про этот лайн? https://github.com/H360ru/araxxes/blob/ec24e88077c38957436cceda9d5a7ad6ff45db8e/scenes/global/global.gd#L10 Тогда конечно, это был временный глобальный костыль для менеджера меню (там особо не нужно было больше одного твина, но чтобы был доступен в глобальном скоупе). Несколько месяцев назад писал, уже и забыл о нем. Перепишу с обращением к статическому классу твинов, на то в папке тест та библиотека и лежит.

Также не понимаю зачем "аддон логики меню". Почему нельзя просто все сделать через сцены? Например одна нода Control как родитель издает нужные сигналы от кнопок, которые ей же и передают сигнал о нажатии. Такие высокоуровневые сигналы упростят и разработку, и создание меню.

Тут есть несколько причин на этого аддона, лучше бы тоже отдельный дискас. Если кратко, то он сразу делался универсальным для быстрого составления сложных модульных меню. "Почему нельзя просто все сделать через сцены?" для того и нужен, чтобы подгружать в будущем тяжелые меню в память и после выгружать при ненадобности.

Т.е. на самом деле, когда наступает необходимость в чуть более сложных менюшках, сразу примерная архитектура древовидная у тебя и возникнет. Там в принципе намного все это удобнее с такими классами, только я бы все же его переименовал и интерфейсные методы получше сделал, а то сейчас ппц названия.

Рефакторинг скриптов из папки автолоуда

Все настройки, на мой взгляд, должны быть в одном синглтоне.

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

Синлтоны под каждый крупный модуль

О, с синглтонами vs экземпляры классов в полях глобала тут у меня тоже тяжелый выбор был, даже с комьюнити на этот счет советовался, щас тему даже надо обязательно отдельно под нее создать.

Все вышеупомянутое мной, на мой взгляд, создает спагетти-код. Куча каких то посредников, хочется все как то прозрачнее.

Вот с этим прямо ждал повода, в одного мне было бы все равно бесполезно думать как лучше разгрести глобальный скоуп, поэтому и нужно полноценное обсуждение минимизации зависимостей.

Deprecated код

Закомментированный файл это проверка (все такие вещи, комменты желательно каждый отдельно помечать тасками с пермалинком и тегом deprecated), ну и напоминание мне быть осторожнее. С файлом связана забавная история, как у меня годо багнул и этот скрипт пустым переписал. Пришлось чудом спасать с разметки диска, строк мало, но неприятно. Конечно в мусорку

Стайл гайд обсуждений

Старайся визуально выделять подтемы форматированием, а в идеале разбивать крупные обсуждения на несколько мелкис с референсами на подтемы хэштегом В идеале под каждый конкретный проблемный скрипт в обсуждении делать issue, это уже получится готовый таск для быстрого подхвата и выполнения. Пример, как у меня это удобно в панельки подхватывается вскодом: изображение

Согласен:

(еще потом дополню коммент ссылками на конкретные таски с пермалинками)

Эту тему можно дополнять и другими идеями, только лучше прицепить отдельным хэшем в новом таске иначе мне отвечать достаточно сложно.