Тут уже несколько раз упоминали Blazor, но всё время в контексте WebAssebly (Client-side blazor). А я вот попробовал сделать небольшой проект в серверном варианте, и это... охрененно. Как будто снова пишешь простое приложение, без клиент-серверных api на каждый чих, (почти) без Java-/Typescript, без разделения на слои. Говнокодишь, но говнокодишь стильно.
Для тех кто не в курсе: Серверный вариант Blazor загружает на клиенте небольшую библиотеку и открвывает WebSocket к приложению на сервере, которое обрабатывает все действия пользователя (или события сторонних компонентов), обновляет у себя виртуальный DOM и при необходимости отправляет набор изменений, которые нужно внести в веб-страницу. Фактически получается одно приложение со множеством клиентских интерфейсов — веб-терминал.
Из того что понравилось:
Нужно подписать веб-страницу (а точнее компонент) на RabbitMQ? Просто подписываешь, никакой организации пересылки сообщений клиенту — оно просто работает.
Нужен доступ к базе — просто берёшь и стучишься в базу, не делая промежуточных api и общих моделей — обычный LINQ-запрос.
И так всё что угодно, без создания api и заботы о его безопасности — всё общение с сервером происходит в рамках вебсокета.
И при этом вся та же идеалогия веб-компонентов, что и в ангуляре/реакте.
Из минусов:
Привязка сессии к приложению. Если приложение будет перезапущено, клиент не сможет переключиться на другой инстанс.
Потенциально из-за общения по вебсокетам на каждое действие клиента или сервера, при большом пинге будет достаточно тормознуто (имхо, "большой пинг" в данном случае — round trip > 300ms)
API Blazor'а ещё активно перетряхивают.
PS. Не то что бы совсем холиварная тема, но речь скорее не о технологии (Blazor), а идеологии (n-tier), так что пусть будет тут.
ARI ARI ARI... Arrivederci!