На чем написан старый код
Что проверяют
Понимаете ли вы, что в мире .NET слово «старый» означает не древнюю версию языка, а рантайм и тип приложения. Спрашивает обычно кандидат, и вопрос хороший: от ответа зависит, будете вы развивать продукт или годами обслуживать то, что нельзя обновить. Если спрашивают вас, проверяют ровно то же понимание на вашем прошлом опыте.
Как отвечать
Главный разделитель это .NET Framework против современного .NET. Уточняйте по слоям:
- рантайм: Framework 4.x, современный .NET или зоопарк из обоих;
- тип приложения: ASP.NET Web Forms, MVC 5, сервисы на WCF, WinForms, WPF. Web Forms и серверная часть WCF в современный .NET не переехали, значит речь о переписывании, а не об обновлении;
- стиль кода: асинхронность или синхронные вызовы через
.Result, контейнер внедрения зависимостей или статические синглтоны, EF6 или голый ADO.NET; - тесты и сборка: есть ли хоть какая-то сеть тестов, чем собирается, как выкладывается;
- стратегия: живём как есть, выносим куски постепенно за прокси по принципу душащего фасада или планируем большое переписывание. Спросите, что реально сделали за последние полгода, это самый честный индикатор.
Если вопрос задан вам и легаси вы поддерживали, отвечайте так же по слоям и добавьте инструменты: помощник обновления, мультитаргетинг, пакет совместимости с Windows, характеризационные тесты перед рефакторингом.
Где спотыкаются
Первое: сводят легаси к версии языка. Старый синтаксис на поддерживаемом рантайме неприятен, но не блокирует ничего, а вот Web Forms блокирует переход целиком.
Второе: обещают миграцию, не проверив зависимости. Специфичные для Windows API, COM, серверный WCF и давно заброшенные сторонние библиотеки способны остановить переезд на несколько кварталов.
Третье: предлагают «перейти на MVVM» как лечение веб-легаси. Шаблонные ответы этим грешат, но MVVM это про WPF и десктоп, а для ASP.NET такой совет просто не означает ничего.