Почему крупные сайты используют разные языки для бэкэнда и внешнего интерфейса?

26

Насколько я понимаю из небольших приложений MVC, у вас есть внешний интерфейс, который имеет дело с HTML, JS, jQuery и т. Д., И у вас есть внутренний интерфейс, который состоит из ваших контроллеров и моделей.

Однако, когда я общаюсь с разработчиками из крупных компаний, они часто упоминают наличие уровня внешнего интерфейса и уровня внутреннего интерфейса. Поэтому иногда я слышал, что у них есть внешний интерфейс с C # и внутренний с Java. Зачем какой-либо компании нужен бэкэнд и фронтенд на разных языках? Помогает ли это масштабированию больших сайтов лучше?

Когда люди говорят, что их внешний интерфейс построен на C #, означает ли это, что они используют инфраструктуру для внешнего интерфейса (например, .NET) и дополнительную структуру на внутреннем сервере (например, Spring)? Или это означает что-то совершенно другое?

user1431282
источник
6
Почему вы хотите иметь что-нибудь на одном языке?!? Языки разные, все настроены для разных целей. Не существует такого понятия, как «язык общего назначения».
SK-logic
33
@ SK-logic: Вы серьезно не можете придумать какое-либо преимущество написания одного приложения на одном языке?
back2dos
10
@ back2dos, нет, я не вижу ни одного преимущества. Это слишком глупо, пытаться использовать язык для чего-то, для чего он не предназначен. Глупо использовать один язык в области, где есть другой, гораздо лучше подходящий.
SK-logic
25
@ SK-logic: С этим аргументом глупо использовать любой популярный язык для начала, потому что для любого домена существует существующий DSL, который был разработан именно для этой области. Но я полагаю, что вы это знаете, поэтому я подозреваю, что у вас сегодня просто плохое настроение, иначе вы бы воздержались от этого уровня обобщения и эмоционального всплеска.
back2dos
3
Команды / менеджеры и платформы будут управлять выбором языка перед любой конкретной задачей. C # ASP.NET был выбран в качестве веб-интерфейса для унаследованного серверного Java-приложения не потому, что в этом веб-приложении было что-то «настолько уникальное», что его размещение в стеке Windows было таким идеальным решением.
JeffO

Ответы:

67

«Front-end» и «Back-end» могут быть туманными терминами, особенно в корпоративных приложениях. «Front-end» может означать пользовательский интерфейс или приложение целиком. «Back-end» может использоваться для обозначения внутренних устройств, или это может быть база данных или внешние службы, которые используются. То, что означают термины, часто полностью зависит от того, с кем вы говорите. Так вы, возможно, спросили: "Эй, что ты имеешь в виду под этим?"

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

Я работаю в большом банке. Моя команда разрабатывает наше приложение на C #. Все это. Но мы используем веб-службы, которые в основном написаны на Java, и эти службы общаются с другими службами, которые общаются с другими службами, которые получают данные учетной записи в соответствующие хранилища данных и из них, и кто знает, какие языки используются с ними.

Короткая версия: люди используют инструменты, которые делают работу.

Энтони Пеграм
источник
1
Теперь я хочу сделать публичный веб-сервис, написанный на Malbolge, который делает что-то действительно простое / общее, просто чтобы кто-то мог сказать, что его самый дальний бэкэнд использует его.
Изката
Как можно добиться такого эффекта сочетания языков?
Прервано
17

Я думаю, вам нужно немного расширить вопрос: почему крупные программные проекты используют более одного языка программирования?

Есть много возможных ответов, наиболее заметными из которых являются:

  • Большие приложения состоят из множества относительно независимых частей; часто каждая часть создается другой командой или даже другим внешним подрядчиком. Преимущество выбора лучшей цены часто превышает выгоду от того, что все на одном языке.
  • Языки приходят и уходят, и иногда компонент большой системы переживает экосистему. Примером из мира Microsoft является то, как много компаний сейчас используют C # для всех новых проектов, но они все еще имеют значительную базу кодов VB. Затраты на переписывание проекта только ради того, чтобы сделать это на новейшем языке программирования, практически никогда не оправдываются.
  • Взаимодействие со сторонними компонентами. Если вашей экосистеме C # необходимо выполнить определенную задачу, для которой существуют только решения Java, у вас есть два варианта: самостоятельно реализовать решение или использовать решение Java и разработать немного клея для интеграции его в вашу систему. Последнее почти всегда дешевле для любой нетривиальной задачи.

Факторы производительности практически никогда не являются причиной, за исключением крайне критически важных приложений, таких как высокочастотная торговля - в этих областях может быть полезно написать критически важный механизм ядра на языке с лучшей производительностью во время выполнения (скажем, C ++), но поддерживающие системы (пользовательский интерфейс, отчеты и т. д.) на более высоком уровне, например Java или C #.

tdammers
источник
6

Это относительно в крупном предприятии.
В моей компании стек примерно

(html/javascript)--> (JSP on Tomcat and Java based WebCMS) -> (.Net SOA)  

Поэтому для команды веб-разработчиков интерфейс - это HTML / JS, а бэкэнд - это Java. Для предприятия внешний интерфейс - Java, а внутренний - .Net.

Фактически уровень .Net должен работать с приложением COBOL / UNIX для выставления счетов и утверждений, поэтому в этом аспекте .Net является внешним интерфейсом, а COBOL - внутренним.

И да, как уже упоминали другие, у нас есть команды разработчиков UX, разработчиков HTML / JS, разработчиков Java, Web Middleware, разработчиков .Net, разработчиков SQL, разработчиков COBOL, работающих с каждой частью стека.

На самом деле на любом достаточно крупном предприятии это черепахи на всем пути вниз.

softveda
источник
+1 за черепах. Я просто рад, что я не черепаха, чей интерфейс - язык ассемблера.
kmote
5

Запутанная семантика

Это проблема семантики. Когда кто-то говорит о клиентском интерфейсе .NET или Java-разработчике, он обычно говорит о человеке, который много знает о языках шаблонов и, возможно, фреймворках, которые никогда не следует использовать больше, например, о веб-формах, которые использовались для того, чтобы попытаться скрыть разбрасывание вещей через стену http (т.е. «веб-разработка») от разработчиков приложений, которые не хотели или, по крайней мере, предполагали, что не хотят узнавать обо всем этом дерьме. В случае смешанных .NET и Java, я не уверен, но я мог только догадываться, что в смысле MVC у них есть Java, действующая для всех вещей бизнес-модели, и .NET, обрабатывающая все остальное, что будет лучше описано как "средний уровень", но все равно все это на стороне сервера.

Реальное разделение - это то, что происходит на сервере и то, что происходит на клиенте или в браузере. Вы можете легко связать создание HTML-кода для отправки или представление внешнего интерфейса с «разработкой внешнего интерфейса», поэтому я предпочитаю избегать путаницы, используя термины «клиент» и «серверная сторона» вместо внешнего и внутреннего, когда обсуждаю то, что я обычно делаю, (обычно работа на стороне клиента).

Языки на стороне клиента

Причина, по которой мы используем тот же набор языков в браузере, заключается в том, что браузер находится на приемной стороне, и по большей части (в настоящее время это было в основном мертвым сопротивлением со стороны Microsoft и Adobe), никто не хочет отсылать три различные версии одной и той же клиентской стороны, чтобы удовлетворить каждого потенциального клиента или требовать установки собственного плагина для работы в Интернете. Кроме того, эти три языка фактически инкапсулируют проблемы на стороне клиента, что позволяет нам быстро создавать и изменять внешние интерфейсы веб-приложений, поддерживая слабую связь между структурой документа, тем, как все выглядит и как все ведет себя. Вы можете изменить один без изменения двух других довольно легко.

Языки на стороне сервера

Причина, по которой у вас есть несколько миллиардов вариантов в сети на стороне сервера, заключается в том, что вы можете. Это твой сервер. Все, что нужно сделать, это общаться через http / ssl, а остальное зависит от вас. Кстати, JavaScript теперь является опцией, но это поднимает интересный вопрос. Если вы по-прежнему относитесь к веб-приложению так, как будто это действительно два приложения по обе стороны этой стены HTTP. Я придерживаюсь мнения, что да, да, ты должен, и я люблю Node.js.

Эрик Реппен
источник
2

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

Если вы сосредоточены на веб-интерфейсе и у вас есть гибкость в выборе реализации, у вас гораздо больше шансов использовать целевой язык веб-интерфейса, такой как JScript или Flex, а не C #.

Точно так же, если вы находитесь в конце приложения для хранения транзакционных данных и имеете дело со многими одновременными действиями одновременно, обычно используются специализированные языки, такие как erlang. (Или сторонние продукты, которые частично реализованы на этих языках)

Майкл Шоу
источник
2

Причиной является бизнес-балансирование рисков.

Допустим, вы гигантский работодатель в одном городе. Вы должны нанять много разработчиков, чтобы создать множество различных сервисов. Допустим, ваша первоначальная оценка такова, что Lanuage A наилучшим образом соответствует вашим интересам, и вы хотите начать с него.

Если вы посвятите себя одной технологии, вы можете высушить кадровый резерв. Вы уверены, что хотите нанять достойного парня из Langauge A, когда рядом со звездой «Language B»? Что если завтра фреймворки Langauge A получат поддержку от основного разработчика? Что если завтра появится удивительный язык C, стоит ли его игнорировать, потому что вы посвятили себя языку A пять лет назад?

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

... и это то, что делают компании.

MrFox
источник
1

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

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

Я предпочитаю использовать Django / Python в качестве CMS на серверной части и использовать Rails, CodeIgniter или Spring MVC на серверной части. Часто нет выбора; у клиента уже есть какой-то устаревший сайт, настроенный на каком-то языке в клиентской части, и ему просто нужно решение CMS. Большинство клиентов даже не знали бы, что CMS использует другой язык или структуру, если им не сказали.

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

Kenzo
источник
0

Примером внутреннего языка является PHP, который является языком сценариев. Когда запрашивается страница PHP, сервер читает код PHP и отображает разметку. Результатом является HTML, который отправляется вам. Вы, просмотрщик веб-страниц, никогда не видите ни одной строки кода PHP. Если предположить, что администратор веб-сервера выполнил свою работу правильно, сервер не сможет и не сможет показать вам реальный код PHP. Он анализируется, когда страница обслуживается, и результатом этого перевода кода является HTML.

yuvashree
источник
Вы путаете клиентскую сторону с внешним интерфейсом. В корпоративных приложениях серверная часть - это место, где хранятся данные и обрабатываются заказы, в том числе большая бизнес-логика. внешний интерфейс - это то, что вызывает эти бэкэнд-системы для управления веб-сайтом (с любой технологией), настольное приложение или мобильное приложение. Все это считается интерфейсом кодирования. Далее идет сторона клиента по сравнению со стороной сервера, но мне не хватает места здесь.
Роб ван дер Веер
Я не понимаю, как ваш ответ отвечает на главный вопрос о том, почему разные языки используются для внешнего и внутреннего интерфейса.