大規模なWebサイトがバックエンドとフロントエンドに異なる言語を使用するのはなぜですか?


26

小さなMVCアプリケーションからの私の理解は、HTML、JS、jQueryなどを扱うフロントエンドと、コントローラーとモデルで構成されるバックエンドがあるということです。

ただし、大企業の開発者と話をするとき、フロントエンド層とバックエンド層があるとよく言われます。そのため、C#を使用したフロントエンドとJavaを使用したバックエンドがあると聞くことがあります。なぜ企業は異なる言語のバックエンドとフロントエンドを必要とするのでしょうか?これにより、大規模なWebサイトのスケーラビリティが向上しますか?

フロントエンドがC#で構築されていると人々が言うとき、これはフロントエンドのフレームワーク(.NETなど)とバックエンドの追加フレームワーク(Springなど)を使用していることを意味しますか?それとも完全に異なるものを意味しますか?


6
同じ言語で何でもしたいのはなぜですか?!?言語は異なり、すべて異なる目的に合わせて調整されています。「汎用言語」のようなものはありません。
SKロジック

33
@ SK-logic:単一の言語で単一のアプリケーションを作成する利点を真剣に考えることはできませんか?
back2dos

10
@ back2dos、いいえ、私は単一の利点を見ることはできません。それはあまりにも愚かで、設計されていないものに言語を使用しようとしています。別の言語が存在する領域で、ある言語を使用するのは、はるかに適切です。
SKロジック

25
@ SK-logic:その議論では、一般的な言語を使用して開始するのは愚かです。なぜなら、どのドメインについても、その領域専用に設計された既存のDSLがあるからです。しかし、私はあなたがそれを知っていると信じているので、私はあなたが今日ただ不機嫌な気分にあると思うか、そうでなければあなたはそのレベルの一般化と感情的な爆発を控えるでしょう。
back2dos

3
チーム/マネージャーおよびプラットフォームは、特定のタスクの前に言語選択を推進します。C#ASP.NETがJavaレガシーバックエンドアプリケーションのWebフロントエンドとして選択されたのは、このWebアプリに「非常にユニークな」何かがあり、Windowsスタックに置くことが非常にぴったりだったからではありません。
ジェフ

回答:


67

「フロントエンド」と「バックエンド」は、特にエンタープライズアプリケーションでは曖昧な用語になる場合があります。「フロントエンド」とは、UIを意味する場合と、アプリケーション全体を意味する場合があります。「バックエンド」は内部を意味するために使用できます。または、データベースまたは消費される外部サービスである可能性があります。多くの場合、用語の意味は、誰と話しているかによって異なります。それで、「ねえ、それはどういう意味ですか?」

大規模なエンタープライズ開発を始めると、たくさんのチームがたくさんのコードを書くことになります。これらのチームは、異なる場所から異なるパラダイムを使用して、異なる言語で開発します。このコードの一部は連携する必要がありますが、ほとんどは連携しません。

私は大銀行で働いています。私のチームはC#でアプリケーションを開発しています。それのすべて。しかし、私たちは、主にJavaで書かれたWebサービスを消費し、それらのサービスは他のサービスにして、適切なデータストアからアカウントデータを取得し、他のサービスにその話を話して、誰が知っている言語は、それらと一緒に使用しているもの。

ショートバージョン:人々は仕事を終わらせるツールを使用します。


1
マルボルジで書かれたパブリックWebサービスを作成して、非常にシンプル/一般的なことを行いたいと考えています。
イズカタ

この言語の組み合わせ効果をどのように達成できますか?
中止

17

質問を少し広げる必要があると思います。なぜ大規模なソフトウェアプロジェクトが複数のプログラミング言語を使用するのですか?

考えられる答えは数多くありますが、最も注目すべきものは次のとおりです。

  • 大規模なアプリケーションは、多くの比較的独立した部分で構成されています。多くの場合、各パーツは異なるチームまたは異なる外部請負業者によって構築されます。多くの場合、最高の入札単価を設定することの利点は、すべてを同じ言語にすることの利点よりも大きくなります。
  • 言語は行き来し、時には大規模システムのコンポーネントがエコシステムよりも長持ちします。Microsoftの世界からの例として、現在すべての新しいプロジェクトにC#を使用している企業がいくつあるかが挙げられますが、それでもかなりのVBコードベースが存在します。最新のプログラミング言語でそれを行うためだけにプロジェクトを書き直すコストは、実際には正当化されません。
  • サードパーティのコンポーネントとのインターフェース。C#エコシステムがJavaソリューションのみが存在する特定のタスクを実行する必要がある場合、2つの選択肢があります。ソリューションを自分で実装するか、Javaソリューションを使用してシステムに統合するための接着剤を少し開発します。後者は、どんな些細なタスクでもほとんど常に安価です。

高周波取引のような非常にパフォーマンスが重要なアプリケーションを除いて、パフォーマンスの考慮事項が実際に理由になることはありません。これらの分野では、実行時のパフォーマンスが優れた言語(C ++など)で重要なコアエンジンを書くことが有益です。ただし、JavaやC#などの上位レベルのサポートシステム(UI、レポートなど)。


6

大企業では相対的です。
私の会社では、スタックはだいたい

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

したがって、Web開発チームにとって、フロントエンドはHTML / JSであり、バックエンドはJavaです。エンタープライズの場合、フロントエンドはJavaであり、バックエンドは.Netです。

実際、.Netレイヤーは、請求および請求用のCOBOL / UNIXアプリケーションと連携する必要があるため、この観点では.Netはフロントエンドであり、COBOLはバックエンドです。

はい、他の人が言ったように、スタックの各部分で作業するUXデザイナー、HTML / JS開発者、Java開発者、Webミドルウェア、.Net開発者、SQL開発者、COBOL開発者のチームがあります。

実際、十分に大規模な企業では、すべてがカメです。


カメの場合は+1。私は、フロントエンドがアセンブリ言語であるカメではないことを嬉しく思っています。
kmote

5

わかりにくいセマンティクス

これはセマンティクスの問題です。誰かが.NETフロントエンドまたはJavaフロントエンドの開発者と言うとき、彼らは通常、テンプレート言語について多くのことを知っている人について話しています。 httpの壁を越えて物事をチャッキングする(つまり、「Web開発」)ことは、そのくだらないことすべてを学びたくない、または少なくとも学びたくないと思われるアプリ開発者からのものです。.NETとJavaが混在している場合、確信はありませんが、MVCの意味では、すべてのビジネスモデルにJavaが作用し、他のすべてがより適切に処理される.NETを持っていると推測できます。 「中間層」としてですが、それでもすべてサーバー側です。

実際の分離とは、サーバー上で起こることと、クライアントまたはブラウザー上で起こることです。送信するHTMLの構築またはフロントエンドの表現を「フロントエンド開発」と簡単に混同することができるので、私が通常行うことを議論する際にフロントエンドとバックエンドの代わりにクライアントとサーバーサイドという用語を使用して混乱を避けることを好みます。 (通常はクライアント側の作業)。

クライアント側の言語

ブラウザーで同じ言語のセットを使用する理由は、ブラウザーが受信側にあり、ほとんどの場合(これに関してMicrosoftとAdobeからほとんどが死んでいる抵抗があるため)、誰も3つを送信する必要がないためです。同じクライアント側の異なるバージョンを使用して、すべての潜在的な顧客を満足させるか、Webが機能するために独自のプラグインをインストールする必要があります。また、3つの言語は実際にクライアント側の懸念を非常にうまくカプセル化し、ドキュメント構造、すべての外観、すべての動作を疎結合に維持することで、Webアプリのフロントエンドを迅速に構築および変更できます。他の2つを簡単に変更せずに、1つを変更できます。

サーバー側の言語

もちろん、サーバーサイドWebに膨大な数のオプションがあるのは、できるからです。それはあなたのサーバーです。必要なのは、http / sslを介した通信だけで、残りはユーザー次第です。ところで、JavaScriptはオプションになりましたが、興味深い質問があります。それでもWebアプリを、HTTPウォールの両側にある2つのアプリのように扱う必要があります。私は、そうです、そうするべきであり、私はNode.jsが大好きである、という苦痛に満ちた情報に基づいています。


2

要するに、大規模なプロジェクトがある場合、プロジェクトで作業する開発者の複数のチームもあり、それらのチームはアプリケーションのさまざまなレイヤーに特化する傾向があります。

Web UIに焦点を当てており、実装の選択に柔軟性がある場合、C#ではなく、JScriptやFlexなどのWeb UIターゲット言語を使用する可能性が高くなります。

同様に、アプリケーションのトランザクションデータストア側にいて、同時に多くのアクションを処理する場合、アーランなどの特殊な言語が使用される傾向があります。(またはこれらの言語で一部実装されているサードパーティ製品)


2

その理由は、ビジネスのリスク分散です。

ある都市の巨大な雇用主だとしましょう。多くの異なるサービスを構築するには、多くの開発者を雇う必要があります。最初の評価では、Lanuage Aがあなたの興味に最も合っていると考えて、それから始めたいとしましょう。

1つのテクノロジーに専念すれば、人材プールが枯渇する可能性があります。言語Bのスターが角を曲がったところにいるときに、まともなランゲージAの男を雇ってもよろしいですか?明日、ランゲージAのフレームワークがメイン開発者によってサポートされるようになった場合はどうなりますか?明日、驚くべき言語Cがある場合、5年前に言語Aにコミットしたので、それを無視すべきでしょうか?

理想的なのは、現在の人材プールとテクノロジーのトレンドを反映した、異なる言語を備えた異質なシステムです。人材プールとトレンドが変化するにつれて、このバランスがゆっくりと変化し、いつでもすべてのシステムが機能し、それらを維持するために人々を雇うことができます。

...そしてそれは企業がやっていることのようなものです。


1

フロントエンドとバックエンドを、同じデータソースを使用する別々のアプリケーションと考えると便利です。

小規模なサイトであっても、フロントエンドはクライアントとのインターフェースであり、バックエンドはCMSのようなものと考えることができます。これらは簡単に別々のMVCアプリケーションにすることができます。フロントエンドには、実行するモデルとコントローラーが必要です。結局のところ、コントローラーはサイト訪問者のエントリポイントであり、モデルはデータベースからユーザーにデータを取得する方法になります。

Django / PythonをバックエンドでCMSとして使用し、Rails、CodeIgniter、Spring MVCをフロントエンドで使用するのが好きです。多くの場合、選択の余地はありません。クライアントのフロントエンドには、既にいくつかの言語で設定されたレガシーサイトがあり、CMSソリューションが必要です。ほとんどのクライアントは、CMSが別の言語またはフレームワークを実行していることを知らないことさえ知りません。

構築したいサイトに最適なものを見つけることです。フロントエンドとバックエンドは実際にデータベースを共有するだけでよいため、両方で作業できる限り、手元のタスクに最適なオプションを自由に選択できます。


0

バックエンド言語の例は、スクリプト言語であるPHPです。PHPページが要求されると、サーバーはPHPコードを読み取り、マークアップをレンダリングします。その結果、HTMLが送信されます。WebページビューアであるPHPコードは1行も表示されません。Webサーバー管理者が自分の仕事を正しく行ったと仮定すると、サーバーは実際のPHPコードを表示し、表示することはできませんでした。ページが提供されたときに解析され、そのコード変換の結果はHTMLです。


クライアント側とフロントエンドを混在させています。エンタープライズアプリケーションでは、バックエンドは、より大きなビジネスロジックを含む、データが保存され、注文が処理される場所です。フロントエンドは、これらのバックエンドシステムを呼び出して、ウェブサイド(テクノロジを問わず)、デスクトップアプリ、またはモバイルアプリを駆動するものです。これはすべてフロントエンドコーディングと見なされます。次はクライアント側とサーバー側ですが、ここではスペースが足りません。
ロブファンデルヴェール

フロントエンドとバックエンドに異なる言語が使用されている理由の主要な質問にあなたの答えがどのように対処しているかわかりません。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.