
Anti-corruption Layer на C#: три шва на проекте миграции с Rails
vsinyavsky 11 минут назад Anti-corruption Layer на C#: три шва на проекте миграции с Rails Средний 13 мин 126 Анализ и проектирование систем * .NET * C# * Проектирование и рефакторинг * Кейс Anti-corruption layer в...
GPT-5.6 31 Temmuz 2026'da yayınlanacak mı?
Вот важная новость с фронта ИИ: vsinyavsky 11 минут назад Anti-corruption Layer на C#: три шва на проекте миграции с Rails Средний 13 мин 126 Анализ и проектирование систем * . NET * C# * Проектирование и рефакторинг * Кейс Anti-corruption layer в учебниках выглядит как одна аккуратная коробка между чужой системой и вашей: всё чужое остаётся снаружи, внутрь проходит только то, что уже переведено на язык вашего домена. Граница ровная, как по линейке.
Почти за год, что мы вытесняли 10-летний Rails-монолит на . NET, такой ровной границы я не увидел ни разу – ни у себя, ни, кажется, у кого-то ещё на живом проекте. Понятно это стало в первую же неделю.
Технические детали
Мы открыли таблицу exercises и нашли в одной JSONB-колонке 14 разных форм одного типа задания, слепленных за 10 лет. Смаппить это в новые DTO как есть – и новая модель отрастит ровно ту же форму, что у Rails. “Нужен ACL”, подумали мы.
Только, как выяснилось на практике, не один. EdTech-LMS, монолит на Ruby on Rails живёт 10 лет. Мы заменяем application-слой на .
NET 9 – не переписываем всё, а вытесняем по эндпоинту через гейтвей: новый эндпоинт идёт в . NET, старый остаётся в Rails до явного переключения. В новую схему переезжаем не сразу, а по факту: трогаем таблицу – тогда и разбираемся с её настоящей формой.
Отраслевые последствия
И почти на каждой таблице эта форма не совпадала с тем, что записано в схеме. Швов получилось 3, и все в разных местах: один тонкий, на чтении – на nullable-комбинациях, один с типизирующим парсером, под тот самый зоопарк JSONB, один с инвариантами, на записи. Каждый из них по-сути ACL, и каждый выглядит по-разному, потому что боль в трёх местах была разная.
У каждого один и тот же каркас: что мы написали в наивной версии, где это пробило, и какой шов вырос на этом месте. Шов первый: прогресс студента (read-side)В Rails прогресс студента по уроку лежит в таблице progresses нескольких полей. score – integer nullable.
completed_at – datetime nullable. attempts – integer с default 0. Плюс JSON-колонка metadata, в которую за годы залили всё, что не помещалось в нормальную схему.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.





