Для контекста, используя C # в редакторе Unity3D.
Я все чаще и чаще начинаю использовать перечисления для свободной привязки вещей к настройкам.
Например, я настраиваю элемент и хочу дать ему визуальный элемент из пула определенных визуальных элементов. Этот визуал в основном является классом, который содержит спрайт, цвет и модель, прикрепленные к целочисленному уникальному идентификатору. Из этого уникального идентификатора я генерирую Enum. И нужно приложить некоторые усилия, чтобы убедиться, что UniqueID на самом деле уникален, и выявить некоторые крайние случаи, связанные с этим.
Преимущество выполнения вышеизложенного состоит в том, что перечисление - это все, что должно храниться в элементечтобы связать его с визуальным. Во время выполнения создается словарь для поиска в enum, а затем для загрузки / использования сохраненного визуального изображения. Это слабо связывает визуальные элементы с элементом, поэтому при загрузке списка элементов автоматически не загружаются все визуальные объекты, связанные с элементом. Последняя часть - это единичное поведение по умолчанию, и это действительно раздражает, и оно действительно замедляет игру и потребляет огромное количество оперативной памяти в этом поведении по умолчанию.
В результате у нас много этих перечислений для различных целей. и много чего происходит. И в настоящее время у нас нет больших проблем с этим.
Однако перечисления и редактирование / генерация этих перечислений подвержены ошибкам в том смысле, что при удалении значений элементы (и любые другие заинтересованные стороны) не являются мудрее, что затем должно быть либопроверено перед сборкой или сталкивается с ошибкой безопасности во время выполнения.
У меня вопрос. Это явное злоупотребление Enums? И если это так, что может быть лучше для решения этой проблемы слабой связи? Если это не так, что может быть лучше для безопасного создания и управления этими перечислениями? Таким образом, тревожные звонки сработают, если что-либо, использующее перечисление, теперь имеет недопустимое значение, или значение значений изменится? Что, по-моему, вряд ли возможно, и требует повсеместного кода для «самопроверки» при перекомпиляции?
Или все это сводится к командной дисциплине, чтобы хорошо управлять значениями и знать, что означают перечисленияи представляете? В этом случае он никогда не сможет сделать этого дизайнера дружественным, если я не напишу специальный редактор для каждого из них.
Спасибо за любые идеи, которые вы могли бы предоставить.