Прошу прощения за странный заголовок, я не знал, как задать вопрос, поэтому, если у вас есть какие-либо предложения относительно того, что было бы более подходящим, дайте мне знать, и я обновлю его.
Часто при программировании я использовал перечисления в качестве ключей к словарям, значения которых являются данными, относящимися к перечислению. Обычно я делаю это до того, как понимаю, что с этим перечислением связано много данных, что затем приводит меня к созданию типа данных.
Например, у меня может быть перечисление:
public enum AreaKey
{
Home,
Hospital,
Park,
TrainStation
}
а затем словарь (Vector2 - это класс с двумя целыми числами):
Dictionary<AreaKey, Vector2> areaCoordinatesByAreaKey;
Позже я решаю, что мне нужна куча других данных, связанных с этой областью, поэтому вместо этого я создаю новый класс с именем:
public class Area
{
Vector2 coordinates;
string name;
// more data
}
Теперь, чтобы сослаться на эти данные, я знаю, что могу просто создать словарь, используя то же перечисление, что и ключ, для извлечения указанной области, но это всегда кажется мне громоздким и почти как неправильный ООП.
У меня есть объекты области. У них есть определенные данные, которые должны отличать их друг от друга. Почему я должен использовать перечисление? Также мне не нравится ломать OCP каждый раз, когда я понимаю, что мне нужна новая область. Было бы здорово иметь возможность просто создать объект и не беспокоиться о внешнем управлении. Однако поиск порядка 1 хорош.
Конечно, я мог бы использовать строковый ключ для его извлечения, но это означает, что люди должны знать строки, и это не очень безопасно для типов... перечисления легко читать. Помогите мне переполнить стек!
Area
объектов с ключомAreaKey
кажется немного странным, потому что у вас всегда будет только одна область каждого типа. - person Evan Trimboli   schedule 22.11.2018enum
связано с тем, что люди должны знать строки. В этой проблеме есть целая часть, о которой вы на самом деле не написали, и именно поэтому вы сюда попали в первую очередь (я полагаю, что это некоторая часть пользовательского интерфейса, из которого пользователи отправляют данные). - person spender   schedule 22.11.2018