Комментарии 4
Плюсик вам в карму. Всегда пишу, что вместо enum
следует использовать какую-то подобную конструкцию и каждый раз ловлю за это кучу минусов :))
Справедливо ловите. Во-первых, подобная конструкция попахивает нарушением SRP: enum описывает состояние, а подобная конструкция добавляет к состоянию логику и необоснованные обвязки.
Во-вторых, растёт code complexity, ибо вам приходится добавлять абстрактный класс и enum-заменители
public abstract class Role : IWorker
{
public static AdminRole Admin = new();
public static UserRole User = new();
public static ModeratorRole Moderator = new();
public abstract void DoWork();
Со стандартным enum достаточно слегка отрефакторить блок switch на работу со значениями enum или тип инстанса role.
Наконец, подобная конструкция слабо вяжется с принципом наименьшего удивления.
Верю, что в некоторых случаях подобные конструкции нужны\полезны. Использовать же их на постоянной основе -- в энтерпрайзе я бы не рискнул, без веской причины.
Вот с чем я согласен, так это с плюсиком в карму.
@AshBlade: полезная статья. И написание кода, и доставка, и тесты, и косяки -- тема раскрыта полностью. Респект!
попахивает нарушением SRP
SRP он ведь совершенно не о том, что "распихай все что только можно по отдельным классам".
подобная конструкция добавляет к состоянию логику
растёт code complexity
"Code Complexity" это когда в солюшене отдельный проект выделенный специально для описания порядка трех сотен enum-ов (да-да, на моей прошлой работе такое было). Вот это я понимаю Настоящий Энтерпрайз :D
Бесстыдно рекламирую серию своих постов (правда пока не завершённую).
enum class и мой первый раз (использования Source Generator)