Как стать автором
Обновить

Комментарии 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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории