Является ли мое использование Enums в качестве пары плохой практикой? - PullRequest
1 голос
/ 24 октября 2019

Для контекста, используя C # в редакторе Unity3D.

Я все чаще и чаще начинаю использовать перечисления для свободной привязки вещей к настройкам.

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

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

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

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

У меня вопрос. Это явное злоупотребление Enums? И если это так, что может быть лучше для решения этой проблемы слабой связи? Если это не так, что может быть лучше для безопасного создания и управления этими перечислениями? Таким образом, тревожные звонки сработают, если что-либо, использующее перечисление, теперь имеет недопустимое значение, или значение значений изменится? Что, по-моему, вряд ли возможно, и требует повсеместного кода для «самопроверки» при перекомпиляции?

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

Спасибо за любые идеи, которые вы могли бы предоставить.

1 Ответ

0 голосов
/ 24 октября 2019

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...