Проект представляет собой двухмерный аналог Minecraft с генерацией мира и сохранением в базу данных. Главной особенностью является сохранение миров.
Анализ кода: проблемы архитектуры
Основная проблема – класс Generator, объединяющий все функции. Он отвечает за генерацию/загрузку мира, работу с базой данных и управление именами файлов. Это нарушает принцип единственной ответственности. Опытные разработчики бы использовали абстракции и интерфейсы, разделив эти слои. Например, отдельный компонент для работы с базой данных (Persistent), другой для инициализации и третий для управления миром.
Проблема объединения ответственности и детали реализации
Метод Start лишён модификаторов доступа, содержит лишние пустые строки и неправильное оформление фигурных скобок. Более важная проблема – флаг newWorld, определяющий загрузку из базы данных или создание нового мира. В Start происходит прямое обращение к базе данных, управление именами файлов (конкатенация имён с расширением), разбиение данных на колонки и типы, генерация и оптимизация мира для Unity, а также сохранение в базу данных. Логика создания нового мира (newWorld) неясна.
Стиль кода и наименование переменных
Наименование переменных неконсистентно (используется нижнее подчёркивание, разные регистры). Двойные комментарии (//) указывают на неуверенность в правильности кода. Компонент Chunks.cs отвечает за загрузку чанков (возможно, это попытка оптимизации).
Методы BakeOptimised и LoadWorld
Название метода BakeOptimised некорректно. Отсутствуют парные методы SaveWorld и LoadWorld. Эти методы не принимают новые миры в качестве параметра.
Разбиение мира на чанки
Мир разделён на прямоугольные зоны (чанков), содержащие квадраты. При перемещении чанки загружаются, выгружаются и генерируются. Данные хранятся на диске и подгружаются по мере необходимости.
Проблемы с терминологией и дублированием кода
Используется несогласованная терминология (зона/чанк). Наблюдается дублирование кода, например, парсинг из таблиц в очереди. Очереди названы с префиксом q (венгерская нотация).
Отсутствие модели мира
Отсутствует чёткая модель мира. Мир представлен в двух формах: сырые данные в базе данных и объекты на сцене. Необходимо было разработать промежуточную модель и использовать дополнительные компоненты/сервисы для преобразования её в формат для сохранения и представления.
Генерация мира
Генерация мира неэффективна. Объекты создаются вручную, вместо использования шаблонов. Каждый блок прикреплён к чанку, но эта информация не используется в модели. Генерация чанков могла бы быть рекурсивной.
Код содержит множество ошибок в архитектуре, стиле и проектировании. Это демонстрирует важность правильного дизайна, чёткой терминологии и избежания дублирования кода.