Enums vs records в C#
Столкнулся с интересной проблемой в одном проекте, связанном с логистикой. Изначально в нем использовался enum для типов перевозки: авто, ж/д, авиа. Казалось бы — просто и понятно. Но со временем это стало болью.
Главная проблема enums - нарушение принципа открытости/закрытости. Каждый новый тип перевозки требовал правки кода enum'а. К тому же, код постепенно обрастал бесконечными switch-case конструкциями, которые приходилось обновлять при каждом изменении enum'а. Легко было что-то упустить и получить ошибки.
Решение нашел в использовании records вместо enums. Каждый тип перевозки теперь - это отдельный record с собственной инкапсулированной логикой. Новый тип - просто новый record, без изменения существующего кода. Архитектура стала чище и гибче.
Опубликовал перевод статьи, которая вдохновила на этот рефакторинг. Очень рекомендую почитать - https://maxmolokanov.ru/2025/08/27/avoid-enums-in-domain-layer/.