Чому великі веб-сайти використовують різні мови для бекенда та фронтену?


26

Я розумію з невеликих програм MVC, що у вас є передній кінець, який має справу з HTML, JS, jQuery тощо, і ви маєте задній кінець, який складається з ваших контролерів та моделей.

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

Коли люди кажуть, що їхній фронтенд побудований на C #, чи означає це, що вони використовують рамку для фронтенду (наприклад, .NET) та додаткову рамку для бекенда (наприклад, Spring)? Або це означає щось зовсім інше?


6
Чому б ви хотіли взагалі щось мати на одній мові?!? Мови різні, усі налаштовані на різні цілі. Не існує такого поняття, як "мова загального призначення".
SK-логіка

33
@ SK-логіка: Ви серйозно не можете думати про якусь перевагу написання однієї заявки однією мовою?
back2dos

10
@ back2dos, ні, я не бачу жодної переваги. Це занадто нерозумно, намагаючись використовувати мову для чогось, на що вона не була розроблена. Дурно використовувати одну мову в тій місцевості, де є інша, набагато краща.
SK-логіка

25
@ SK-логіка: З цим аргументом дурно використовувати будь-яку популярну мову для початку, оскільки для будь-якого домену існує існуючий DSL, призначений саме для цієї області. Але я вважаю, що ви це знаєте, тож я підозрюю, що сьогодні ви просто в настрої, що боїться, інакше ви утримаєтесь від такого рівня узагальнення та емоційного спалаху.
back2dos

3
Команди / менеджери та платформи здійснюватимуть вибір мови перед будь-яким конкретним завданням. C # ASP.NET був обраний в якості веб-переднього кінця для застарілого додатка Java не тому, що в цьому веб-додатку було щось настільки унікальне, що його розміщення на стеку Windows було таким ідеальним пристосуванням.
JeffO

Відповіді:


67

"Фронт-енд" та "Бек-енд" можуть бути неясними термінами, особливо в корпоративних програмах. "Фронтальний" може означати інтерфейс користувача, або це може бути вся програма. "Задній" може використовуватися для позначення внутрішніх даних, або це може бути база даних або зовнішні служби, які споживаються. Що означають терміни, часто повністю залежать від того, з ким ви говорите. То ви, можливо, запитали "ей, що ти розумієш під цим?"

Коли ви вступаєте у розвиток великих підприємств, у вас буде багато та багато команд, які пишуть багато та багато коду. Ці команди будуть розвиватися різними мовами, використовуючи різні парадигми, з різних локацій. Деякі з цього коду потрібно буде працювати разом, і значна частина цього не буде.

Я працюю у великому банку. Моя команда розробляє нашу програму на C #. Все це. Але ми споживаємо веб-сервіси, які в основному написані на Java, і ці служби спілкуються з іншими службами, які спілкуються з іншими службами, які отримують дані облікових записів до відповідних сховищ даних і хто знає, якими мовами користуються.

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


1
Тепер я хочу зробити публічний веб-сервіс, написаний на Malbolge, який робить щось дійсно просте / звичайне, просто так, щоб хтось міг сказати, що його віддалений сервіс використовує це.
Ізката

Як можна досягти ефекту поєднання мови?
Аборт

17

Я думаю, вам потрібно трохи розширити питання: Чому великі програмні проекти використовують більше однієї мови програмування?

Є багато можливих відповідей, найпомітніші з них:

  • Великі програми складаються з багатьох відносно незалежних частин; часто кожну частину будує інша команда або навіть інший зовнішній підрядник. Вигода від вигідної ставки часто більша, ніж користь від того, що все є на одній мові.
  • Мови приходять і йдуть, а іноді компонент великої системи переживає екосистему. Приклад зі світу Microsoft - це те, що багато компаній зараз використовують C # для всіх нових проектів, але вони все ще мають значну кодову базу VB. Вартість переписування проекту лише заради виконання його новітньою мовою програмування практично ніколи не виправдана.
  • Взаємодія з сторонніми компонентами. Якщо вашій екосистемі C # потрібно виконати конкретне завдання, для якого існують лише рішення Java, то у вас є два варіанти: реалізувати рішення самостійно або скористатися рішенням Java і розробити трохи клею, щоб інтегрувати його у вашу систему. Останнє майже незмінно дешевше для будь-якого нетривіального завдання.

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


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 devs, Web Middleware, .Net devs, SQL devs, COBOL Devs, що працюють на кожній частині стека.

Насправді на будь-якому досить великому підприємстві це черепахи аж донизу.


+1 для черепах. Я просто радий, що я не черепаха, передня частина якої - мова асамблеї.
kmote

5

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

Це питання семантики. Коли хтось каже, що .NET front end або Java front end developer, вони зазвичай говорять про людину, яка багато знає про шаблонні мови та, можливо, рамки, які ніколи більше не будуть використовуватись, як веб-форми, які використовувались для спробу та приховування мацання речей через стінку http (тобто "веб-розробка") від розробників додатків, які не хотіли або принаймні вважали, що не хочуть дізнаватися про все це лайно. Що стосується змішаних .NET та Java, я не впевнений, але я міг лише здогадуватися, що в сенсі MVC у них є Java, яка діє на всі речі бізнес-моделі та .NET, що обробляє все інше, що було б краще описано як "середній рівень", але це все ще на стороні сервера.

Справжня розлука - це те, що відбувається на сервері і що відбувається з клієнтом або браузером. Ви можете легко зв'язати побудову HTML, який потрібно надіслати або представляти передню частину, з "розробкою на передньому кінці", тому я вважаю за краще уникати плутанини, використовуючи терміни клієнт та сторону сервера замість передньої та задньої, коли обговорюю те, що я зазвичай роблю, (як правило, робота на базі клієнта).

Мови на стороні клієнта

Причина, по якій ми використовуємо той самий набір мов у браузері, полягає в тому, що браузер перебуває на приймальному кінці, і здебільшого (здебільшого це стосується в основному мертвого опору Microsoft та Adobe), ніхто не хоче надсилати три різні версії того самого клієнта, щоб задовольнити кожного потенційного клієнта або вимагати встановлення власного плагіна, щоб веб-мережа працювала. Крім того, ці три мови насправді вкладають проблеми на стороні клієнта, дозволяючи нам швидко будувати та змінювати передні сайти веб-додатків, підтримуючи вільну зв'язок між структурою документа, як все виглядає і як це все поводиться. Можна змінити одне, не змінюючи двох інших досить легко.

Мови на стороні сервера

Звичайно, у вас є базові параметри на стороні сервера, звичайно, тому, що ви можете. Це ваш сервер. Все, що вам потрібно зробити, - це спілкуватися через http / ssl, а решта - тільки від вас. JavaScript - це варіант, до речі, але це викликає цікаве питання. Якщо ви все ще ставитесь до веб-додатків, як це дійсно два додатки з обох боків стіни HTTP. Мені притаманна думка про те, що так, так, ви повинні, і я люблю Node.js.


2

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

Якщо ви зосереджуєтесь на веб-інтерфейсі, і у вас є гнучкість у виборі реалізації, ви, швидше за все, використовуєте мову, орієнтовану на веб-інтерфейс, таку як JScript або Flex, а не C #.

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


2

Причина - балансування бізнес-ризиків.

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

Якщо ви дотримуєтесь однієї технології, ви можете висушити пул талантів. Ви впевнені, що хочете найняти гідного хлопця Langauge, коли біля кута є зірка Language B? Що робити, якщо завтра рамки Langauge A захопляться для підтримки головного розробника? Що робити, якщо завтра з'явиться дивовижна мова С, якщо ви її нехтуєте, оскільки ви прихильнилися мові A п'ять років тому?

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

... і це щось, що роблять компанії.


1

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

Навіть для менших сайтів ви можете вважати, що передній кінець є тим, що клієнт взаємодіє, а задній - як щось на зразок CMS. Це легко можуть бути окремими програмами MVC. Передній кінець все ще потребує моделей та контролерів для запуску - адже контролер - це точка входу для відвідувачів вашого сайту, і ці моделі стануть способом отримання даних із вашої бази даних для користувача.

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

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


0

Прикладом мови зворотного кінця є PHP, що є мовою сценаріїв. Коли запитується сторінка PHP, сервер зчитує код PHP та робить розмітку. Результат - HTML, який надсилається вам. Ви, переглядач веб-сторінок, ніколи не бачите жодного рядка коду PHP. Якщо припустити, що адміністратор веб-сервера виконав свою роботу правильно, то сервер би і ніколи не міг показати вам фактичний код PHP. Він аналізується, коли сторінка подається, і результатом цього перекладу коду є HTML.


Ви змішуєте клієнтську сторону з лицьовою стороною. У корпоративних додатках доповнення - це місце, де зберігаються дані та обробляються замовлення, включаючи більшу логіку бізнесу. передній кінець - це те, що викликає ці резервні системи для переходу на веб-сторінку (за будь-якої технології), настільний додаток або мобільний додаток. Це все вважається кодуванням на передньому кінці. Далі йде клієнтська сторона проти серверної, але у мене тут не вистачає місця.
Роб ван дер Веер

Я не бачу, як ваша відповідь стосується основного питання, чому різні мови використовуються для переднього та заднього кінців.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.