У вас есть несколько вопросов, которые, вероятно, следует разделить ...
Моя проблема - это тип пользователя.Иногда это строка, а иногда int
Не делайте этого тогда.Это немного банальный ответ, но ваш тип пользователя - либо строка, либо int.Подумайте, кто это на самом деле, или вы хотите, чтобы это было, и сделайте это таким.
Вы можете использовать перечисления, хотя, конечно, они жестко закодированы, поэтому вы не можете легко добавлять или удалять, но они, по крайней мере, имеют преимущество, заключающееся в том, что вы можете соединить строку с int делением.
Вероятно, было бы лучше, если бы вам нужно было использовать и то и другое, чтобы иметь поиск в вашей базе данных (то есть таблицу, которая соответствует строкам и целым числам), и тогда у вас может быть метод, который ищет его где-то (возможно, только получая преобразования из базы данных один раз изатем кэшируем их, а не выполняем вызов БД для каждого поиска).
Кроме того, пользовательский класс возвращает различную информацию, например, я хочу только указать имя и фамилию, а иногда я хочу указать имя пользователяи активный и не активный.
Опять же, я не хочу создавать отдельный класс для каждого, но я не хочу возвращать данные, которые мне не нужны.
Какмного данных есть?В большинстве случаев вы не будете смотреть на большие накладные расходы, если будете каждый раз выкупать все данные, и это будет проще, потому что вы всегда будете знать, что пользовательский объект содержит всю необходимую ему информацию.Если вас особенно беспокоит получение больших объемов данных, которые вам не нужны, вы можете посмотреть на Ленивая загрузка , которая может сделать то, что вы хотите.Возможно, вы обнаружите, что добавление «активного» флага в запрос данных к БД намного меньше затрат, чем повторный вызов БД, если бы вы решили, что хотите эту информацию.
По сути этовесьма вероятно, что когда-либо будет узким местом в производительности, если у пользователя нет больших массивов данных, связанных с ним.Имя пользователя, имя, фамилия и другие данные, которые обычно измеряются в байтах, вряд ли вызовут у вас проблемы, поэтому я не буду беспокоиться об этом, пока вы не докажете, что они являются узким местом в производительности.В этот момент вы можете беспокоиться о Lazy Loading или подобном, чтобы разобраться в своих проблемах.