Отказ от ответственности: Следующие правила не являются жесткими и быстрыми. Это только мои мнения и личные предпочтения. Лично я считаю, что это делает мой код легче для чтения и обслуживания.
Первый вопрос. Где ты наткнулся на этот совет? Они предоставили какое-либо обоснование?
По своему опыту я обычно использовал закрытые вложенные перечисления для улучшения читабельности и удобства сопровождения моего кода. Это особенно важно, когда вы выполняете интеграцию с другой системой и вам необходимо отправить конкретные строки или числа. Я считаю, что использование enum облегчает чтение и поддержку. В этом конкретном случае информация, передаваемая перечислением, ограничена областью действия для класса (т. Е. Она не имеет смысла вне класса и никому больше не нужна).
Я не могу придумать окончательной причины, объясняющей, почему публичные внутренние перечисления являются плохой практикой. Но вот причины, по которым я (обычно) не пользуюсь ими:
- Если перечисление общедоступно, это, по сути, означает, что оно передает информацию в большем объеме (то есть имеет смысл вне области своего родительского класса, и, следовательно, это, вероятно, означает, что другие вещи используют его). Если это так, то, возможно, имеет смысл сделать это отдельным перечислением.
- Мне кажется,
ThirdPartyResponseCodes.Success
легче для глаз, чем ThirdPartyIntegrationInterface.ThirdPartyResponseCodes.Success
. Нет никаких причин, по которым вы не можете назвать перечисление соответствующим образом, чтобы обеспечить контекст и, следовательно, сделать его независимым перечислением.
- Я полагаю, что те же причины, по которым не используются публичные внутренние классы, применимы и к публичным внутренним перечислениям. Прежде всего, если у вас есть внутренний класс, это может означать, что ваш внешний класс может выиграть от рефакторинга. Возможно, ваш внешний класс пытается сделать слишком много? С другой стороны, есть преимущество инкапсуляции и ограничения области видимости, особенно если вы можете сделать аргумент, что внутренний класс имеет смысл только в контексте внешнего класса (что само собой разумеется, если он частный). Если это открытый внутренний класс, то это, вероятно, означает, что его область действия выходит за пределы внешнего класса, и, следовательно, его необходимо удалить.
- Если вам действительно нужно использовать общедоступное вложенное перечисление, то вы должны точно указать, зачем оно вам нужно (я пока не нашел причины для этого) и почему лучше оставить его как общедоступное перечисление а не публичное отдельное перечисление.