Создание веб-приложений на стороне сервера против клиента или гибрида? [закрыто]

27

В настоящее время существует несколько подходов к созданию веб-приложений:

1. Только на стороне сервера

Это классический подход, при котором вы отображаете страницы на сервере с помощью веб-фреймворка, такого как Ruby on Rails, Django, Express, Play! Рамки и т. Д.

Типичный рабочий процесс . Создайте всю свою бизнес-логику, модели и шаблоны представления на сервере в рамках вашего выбора.

2. Клиентский + REST API

Относительно недавно веб-сообщество в целом начало создавать клиентские приложения в Angular, Backbone, Ember и нескольких десятках других сред JavaScript MV *. И теперь у нас есть React.js, вступающий в партию.

ОБНОВЛЕНИЕ : Там нет недоразумений. То, что я имел в виду только на стороне клиента, это полное разделение интересов. У вас есть сервер REST API и клиентское приложение, которое взаимодействует с этим сервером. В зависимости от вашего варианта использования, скорее всего, у вас никогда не будет истинного клиентского приложения, которое не подключается к серверной части ни для аутентификации, ни для сохранения данных.

Типичный рабочий процесс : потратьте часы, выбирая Angular против Backbone против Ember против X. Затем вы строите свои маршруты, модели, представления, контроллеры на клиенте. После того, как вы закончите, теперь собирайте модели, контроллеры, маршруты на сервере. Таким образом, вы выполняете двойную работу.

3. Гибрид

Я не очень разбираюсь в использовании этого подхода, но если бы у меня возникло предположение, вы представляете свои представления (представление инфраструктуры MVC) на сервере. В результате вы получаете поддержку SEO и более быструю загрузку страниц.

На Гибридная фронте есть AirBnB в rendr , что якобы объединяет позвоночник и выразить вместе.

Эрик Флоренсо написал сегодня в своем блоге: React: Наконец, отличный веб-стек для сервера / клиента .

Количество способов создания веб-приложений просто огромно. И для тех, кто изучает веб-разработку, это может стать проблемой. Как решить, какой подход использовать для создания следующего приложения?

Rated R
источник
1
«Только на стороне клиента: ... После того, как вы закончите, теперь создайте модели, контроллеры, маршруты на сервере». Это не разбирает.
user16764
@ user16764 обновил мой вопрос.
Rated
Несколько интересных ссылок: kreuzwerker.de/en/blog/posts/… , branchandbound.net/blog/web/2012/11/…
dagnelies

Ответы:

13

Я думаю, что вы совершенно не поняли «Только на стороне клиента».

Во-первых, он должен быть помечен как «Ориентированный на клиента». Весь этот аспект фреймворков, таких как Angular, заключается в том, что части VC MVC полностью реализованы в браузере в Javascript. Логика более высокого уровня «M» части «M» - Модель - реализована в браузере, а логика «CRUD» нижнего уровня реализована на сервере.

Бизнес-логика разрабатывается один раз. Логика представления разрабатывается один раз. Логика управления разрабатывается один раз - и все это в рамках выбора Javascript. Логика доступа к данным также разрабатывается только один раз, но на этот раз в любой среде RESTy или SOAPy, которую вы выбираете на стороне сервера.

В крайних случаях вы можете реализовать Модель полностью на клиенте, если допустимо получить доступ к данным только из одного браузера на одном компьютере и получать данные каждый раз, когда выбрана опция «Очистить куки».

Джеймс Андерсон
источник
Действительно трудно не развивать хотя бы часть бизнес-логики дважды. Для хорошего взаимодействия с пользователем вам необходимо убедиться, что пользователь вводит свою электронную почту, чтобы продолжить. Но вы не можете доверять клиенту, поэтому вам также нужно реализовать правило на сервере. По крайней мере, я очень надеюсь, что вы не говорите, внедрите бизнес-логику в JS на клиенте.
Энди
@ И это точно моя точка зрения. Когда я создавал приложение Ember, базовая проверка формы должна была выполняться на клиенте, но также на сервере. Однажды у меня возникли серьезные проблемы из-за того, что я не проверял свои данные на сервере и полностью не доверял клиенту.
Rated R
Энди и все - взгляните на документы Google. Помимо загрузки документа, электронной таблицы и т. Д. С сервера, его сохранения в конце и периодического резервного копирования между всем остальным происходит в вашем браузере. Сайт Google Docs просто служит хранилищем данных и сервером аутентификации.
Джеймс Андерсон
3
@JamesAnderson Документы Google сильно отличаются от, скажем, интернет-магазина. Вы редактируете свой собственный документ, это просто блок данных, который они сохраняют, не заботясь о том, что эти данные означают. Но вы действительно думаете, что проверка заказа должна выполняться ТОЛЬКО на клиенте? Вы просто просите, чтобы люди давали себе бесплатные продукты, если вы создаете такое приложение. Похоже, вы также предполагаете, что Google фактически не выполняет никакой проверки данных на стороне сервера. У нас нет никакого способа узнать, что происходит.
Энди
9

Ответ на вопрос заключается в том, что это зависит от требований. По крайней мере поверхностный взгляд на историю «веб-разработки» указывает на ковбойскую культуру, в которой общение с заинтересованными сторонами, клиентами, сбор требований часто упускается из виду.

Мне посчастливилось побывать на выступлении несколько лет назад, где я услышал нечто, что действительно застряло во мне: «вы выбираете дизайн, чтобы соответствовать требованиям, а не требованиям, чтобы соответствовать дизайну». Поэтому, когда вы сталкиваетесь с таким вопросом, вам нужно выяснить, что действительно нужно людям, которые просят вас создать это программное обеспечение.

Ваша задача - объяснить плюсы и минусы каждого подхода.

RibaldEddie
источник
1
Спасибо. То, что вы говорите, имеет смысл. Я надеялся, что найдется «серебряная пуля», один верный способ сделать что-то. Я начал с веб-фреймворка Python под названием Django в 2011 году. Вскоре после этого был большой толчок к клиентским фреймворкам MV *, таким как Backbone, Angular, Ember. И вдруг Rails и Django способ создания веб-приложений устарел. Но сегодня кажется, что мы делаем шаг назад и снова смешиваем клиентскую сторону с серверной для достижения лучшей производительности.
Rated R
К сожалению, нет, серебряной пули нет. :). Однако хитрость заключается в том, чтобы иметь достаточное понимание того, как части сочетаются друг с другом, чтобы определить наилучшие результаты для поставленной задачи, а также поддерживать культуру безжалостного рефакторинга, чтобы вы всегда могли изменить вещи, если ваше первоначальное направление не было плодотворным.
Рибальд Эдди
1
Это хорошо, и все, но иногда оба подхода жизнеспособны, и в этом случае вам нужно что-то еще, кроме требования принять решение.
Сед
5

Я думаю, что один из ключевых моментов более новых подходов и структур заключается в том, что существует меньшая связь между технологиями переднего плана и технологиями внутреннего интерфейса.

Идея состоит в том, что вы можете использовать любую платформу на клиенте и извлекать данные и / или представления из любого числа источников независимо от серверной инфраструктуры.

Это позволяет нам выбирать лучшие инструменты для выполнения работы, и наш выбор может развиваться независимо.

По общему признанию, я не использовал Angular или Backbone, поэтому я не могу давать какие-либо опытные рекомендации. Мой текущий базовый стек состоит из самой тонкой серверной части mvc или остальных служб, которые я могу найти. В основном доставка шаблонов и данных. Данные визуализируются и / или последующие данные извлекаются на стороне клиента, используя в основном просто старый javascript, jquery и css.

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

CRAD
источник