Призадумался я над такой вот проблемой. Как мы можем полноценно реализовать концепцию MVC веб приложений, оставаясь в пределах одного языка или фреймверка? Ведь, фактически, наше приложение размазано между клиентом и сервером. Например, очевидно, что вид логичней всего реализовывать на клиентской стороне. Что касается модели и контроллера, то все не так однозначно. Например, клиент нажимает на кнопку. Должен ли об этом нажатии что-то знать вид? Сомневаюсь. Логично, что это нажатие слушает контроллер. Значит что, контроллер тоже на клиенте? Но как мы будем тогда на сервере диспетчеризовать запросы? Значит что получается: контроллер у нас размазан между клиентом и сервером. Примерно те же самые проблемы возникают и с моделью, например, нужно достать данные из кэша или тянуть их с сервера? модель значит должна быть и на клиенте. Нужно как то абстрагировать это различие, нужен слой абстракции. А как мы его обеспечим, если клиентская и серверная сторона на разных языках и технологиях?
Все это усугубляется еще и появлением вебсокетов, когда сервер сам может становится клиентом, а клиент — сервером.
Тут напрашивается решение в лоб: писать отдельный язык, который скроет детали различий между клиентской и серверной стороной. Или множество контроллеров и моделей по обеим сторонам, которые проксируют друг другу запросы? Еще варианты?