Для внутренней фронтенд разработки мы используем Angular. Это отличный фреймворк, который существенно ускоряет разработку. В связке с Typescript он становится еще мощнее.

Преимуществом Angular является то, что на нем очень удобно делать компоненты и управлять состоянием. Идея отслеживать изменения модели и автоматически перерисовывать представление оказывается очень мощной. Ею легко овладеть. Несмотря на то, что порог вхождения считается довольно высоким из моего получается, что это не так. У одного и того же разработчика, на jQuery и Angular получаются очень разные по функциональности компоненты.

Скажем так, что на jQuery они вообще не получаются, на выходе месиво из разных функций, беспорядочно вызываемых. В то же время на Angular все разбито на компоненты и более менее упорядочено.

Но кое за что мне хочется поругать Angular. В нем довольно сложно переиспользовать компоненты. Из-за того, что фреймворк нещадно смешивает html и код приложения, трудно отделить верстку от бизнес логики. И мои приложения получаются сборником довольно разувесистых компонент, которые совсем не комбинируются друг с другом, а просто являются отдельными страницами приложения.

В этом плане мне нравится идея, так сказать перенести рендеринг на сервер. Там можно строить тот же виртуальный дом, что строится на клиенте при изменении модели и отправлять назад в браузер. Клиентскому коду останется только собирать ввод пользователя, отправлять на сервер и подставлять в реальный dom, dom отрендаренный на сервере.

Что это даст?

  • Клиент будет содержать минимальную, хотя и довольно сложную логику
  • Все компоненты будут строиться, а значит и тестироваться на сервере, тут можно возразить, что тестировать можно и клиентский Angular, но иметь два фреймворка для тестирования хуже чем один и потому тестировать на сервере мне видится проще
  • Такой подход удобен для индексации поисковиками, хотя это и не случай внутренней разработки
  • При генерации html серверными функциями можно пользоваться всею мощью любимой IDE