web-dev-qa-db-ja.com

ソフトウェアフレームワークとは何ですか?

誰かがソフトウェアフレームワークとは何かを教えてください。なぜフレームワークが必要なのでしょうか。フレームワークはプログラミングを容易にするために何をしますか?

185
Anxious

私はそれに答えるのがとても遅いです。しかし、私は今日だけ考えた一つの例を共有したいと思います。もし私があなたに5m x 5mの寸法の紙を切るように言ったならば、きっとあなたはそれをするでしょう。しかし私があなたに同じ大きさの紙を1000枚切るように頼むとしましょう。この場合、1000回測定することはありません。明らかに、あなたは5m x 5mのフレームを作るでしょう、そしてそれの助けを借りてあなたはより短い時間で1000枚の紙を切ることができるでしょう。ですから、あなたがしたことは特定の種類のタスクを実行するフレームワークを作ることでした。同じ種類のアプリケーションに対して同じ種類のタスクを何度も実行する代わりに、これらすべての機能を1つのNiceパケットにまとめたフレームワークを作成します。これにより、アプリケーションおよびより重要なことには多くのアプリケーションに抽象化できます。

409
Neha Choudhary

技術的には、needフレームワークではありません。本当にシンプルなサイトを作っているのなら(1992年のWebについて考えてみれば)、ハードコーディングされたHTMLといくつかのCSSを使ってすべてをやることができます。

そして、もしあなたが現代のウェブアプリケーションを作りたいのであれば、そのためのフレームワークを使うためにneedを実際には使用しないでください。

代わりに、毎回自分で必要なロジックをすべて書くことを選択できます。あなたはあなた自身のdata-persistence/storageレイヤを書くことができます - あるいはもしあなたがあまりに忙しいなら - ただ一つのデータベースアクセスのためにカスタムSQLを書くだけです。あなたはあなた自身の認証とセッション処理層を書くことができます。そしてあなた自身のテンプレートレンディングロジック。そしてあなた自身の例外処理ロジック。そしてあなた自身のセキュリティ機能。そして、あなた自身の単体テストフレームワークがすべてうまくいくことを確認するために。そしてあなた自身の... [かなり長い間続きます]

それから、もしあなたがdoフレームワークを使えば、通常は査読付きの良い恩恵を受けることができるでしょう。他の何百もの開発者ではないにしても非常によくテストされた何十もの仕事。時間をかけずに上記のインフラストラクチャ項目を構築したり心配したりすることなく、必要なものを迅速に構築できます。

あなたはより短い時間でより多くのことを成し遂げることができます、そしてあなたが使っているか、または拡張しているフレームワークコードはあなたがそれをすべて自分でやるよりもよく成し遂げられる可能性が非常に高いことを知っています。

そしてこれのコストは?時間をかけてフレームワークを学びましょう。しかし、ほとんどすべてのWeb開発者が証明するように、選択したフレームワークを使用することによって膨大な(本当に大規模な)利益を得ることを学ぶために時間を費やす価値は確実にあります。

89
Steve Jalim

ウィキペディア(ソフトウェアフレームワーク)のまとめ (最初のグーグルヒット)はそれを非常によく説明しています。

コンピュータプログラミングにおけるソフトウェアフレームワークは、一般的な機能を提供する共通コードが特定の機能を提供するユーザコードによって選択的に無効にされるかまたは特殊化され得る抽象概念である。フレームワークは、明確に定義されたApplication Programming Interface(API;アプリケーションプログラミングインターフェイス)にラップされたコードの再利用可能な抽象化であるという点で、ソフトウェアライブラリの特別なケースです。

ソフトウェアフレームワークには、ライブラリや通常のユーザーアプリケーションからそれらを区別するこれらの際立った機能があります。

  1. 制御の逆転 - フレームワークでは、ライブラリや通常のユーザーアプリケーションとは異なり、プログラム全体の制御の流れは呼び出し側によって決まるのではなく、フレームワーク。[1]
  2. デフォルトの動作 - フレームワークにはデフォルトの動作があります。このデフォルトの振る舞いは実際には便利な振る舞いでなければならず、一連のno-opではありません。
  3. 拡張性 - フレームワークは通常、選択的なオーバーライドによって拡張することも、特定の機能を提供するユーザーコードによって特殊化することもできます。
  4. 変更不可能なフレームワークコード - 一般的に、フレームワークコードは変更することができません。ユーザーはフレームワークを拡張できますが、そのコードを変更することはできません。

それはアプリケーションを開発するときあなたにそれがあなたがそれをすでに書いたそしてテストされた機能をたくさん含んでいるので素晴らしいショートカットを提供するかもしれないのでそれを「必要とする」かもしれません。その理由は、ソフトウェアライブラリを使用している理由とよく似ています。

52
aioobe

すでにたくさんの良い答えがありますが、私はあなたに別の視点を与えることができるかどうか見てみましょう。

物事をかなり単純化すると、フレームワークは実際の機能を除いて完成したアプリケーションと見なすことができます。機能とPRESTOを接続します!あなたはアプリケーションを持っています。

たとえば、GUIフレームワークを考えます。フレームワークには、アプリケーションを作成するために必要なものがすべて含まれています。実際、あなたはたいていほんのわずかな行のソースで絶対に何もしない最小限のアプリケーションを作ることができます - しかしそれはあなたにウィンドウ管理、サブウィンドウ管理、メニュー、ボタンバーなどを与えます。アプリケーションの機能を追加してフレームワークの適切な場所に「プラグインする」ことで、ウィンドウ管理などしかできないこの空のアプリケーションを本格的な本格的なアプリケーションに変えることができます。

実際の問題ドメイン機能を提供しながら、Webアプリケーション、サーバーサイドアプリケーションなどのための類似したタイプのフレームワークがあります。それぞれの場合において、フレームワークは面倒で繰り返しの多いコードの大部分を提供します。 (これが理想です。実際には、もちろん、フレームワークの成功には大きなばらつきがあります。)

私はこれがフレームワークとは何かの単純化された見方であることを再度強調します。ほとんどのフレームワークにはこのような怖い概念が組み込まれていますが、私は "Inversion of Control"などのような怖い用語を使用していません。あなたは初心者なので、私はあなたに専門用語を惜しまないで、そして簡単なsimileで行くと思いました。

私は「フレームワーク」の明確な定義があるかどうかわからない。ライブラリの大規模なセットはフレームワークと呼ばれることがありますが、私はWordの典型的な使い方はaioobeがもたらした定義に近いと思います。

これは とてもいい記事です ライブラリのセットとフレームワークの違いをまとめたものです。

フレームワークは、「電話しないでください。電話してください」という一連のライブラリとして定義できます。

フレームワークはどのように役立ちますか?最初から何かを書くのではなく、基本的には与えられた実用的なアプリケーションを拡張するだけだからです。この方法で多くの生産性を得ることができます - 時には、結果として得られるアプリケーションが、同じ時間枠内で自分でしたよりもはるかに複雑になる可能性があります - しかし、通常は柔軟性を重視します。

12
Oak

簡単な説明は次のとおりです。フレームワークは、アプリケーションを構築できる足場です。

フレームワークは通常、より複雑なアプリケーションを作成するために使用したり拡張したりできる基本機能を提供します。あらゆる種類のもののためのフレームワークがあります。 Microsofts MVCフレームワークはその好例です。それはあなたがMVCパターンを使用して地上建築ウェブサイトから降りるために必要なすべてを提供します、それはウェブ要求、ルートなどを扱います。あなたがしなければならないのは、 "Controllers"を実装し、MVCフレームワークによって定義された2つの構成要素である "Views"を提供することだけです。 MVCフレームワークは、コントローラの呼び出しとビューのレンダリングを処理します。

おそらく最高の表現ではないが、私はそれが役立つことを願っています

7
Sekhat

最低レベルでは、フレームワークは環境であり、そこで作業するためのツールのセットが与えられます。

このツールはライブラリ、設定ファイルなどの形式で提供されています。

このいわゆる「環境」は基本的な設定(エラー報告、ログファイル、言語設定など)を提供します...これは修正、拡張そして構築することができます。

人々は実際にはフレームワークを必要としません、それは単に時間を節約したいということの問題であり、そして他のものは単に個人的な好みの問題です。

フレームワークを使えば、ゼロからコーディングする必要がないことを人々は正当化するでしょう。しかし、それらは単にライブラリとフレームワークを混同する人たちです。

私はここでバイアスをかけられていません、私は実際に今フレームワークを使用しています。

4
yretuta

一般に、フレームワークは、構造を有用なものに拡張するものを構築するためのサポートまたはガイドとしての役割を果たすことを目的とした、実際のまたは概念的な構造です...

3
uma

フレームワークは "既に作成された"を使うことについて私たちを助けます、比喩はのようでありえます、

地球材料はプログラミング言語だと思います、

たとえば、「カメラ」がプログラムであり、あなたはノートブックを作成することにしました。毎回カメラを再作成する必要はありません。単に地球のフレームワークを使用して(たとえば、テクノロジーストアに)、カメラを取り、それをノートブックに統合するだけです。

2
stckvrflw

定義を超えて(あなたがすでに理解している場合にのみ時には理解できることがあります)、例は私を助けました。

私は.Netでリストをソートするのを見ているとき、私は理解をちらっと見たと思います。特定の機能を提供するユーザーコードによって調整された機能を提供するフレームワークの例。 List.Sort(IComparer)をください。 Sortメソッドの.Netフレームワークにあるソートアルゴリズムは、一連の比較を行う必要があります。オブジェクトAはオブジェクトBの前後に来るのでしょうか。しかし、並べ替え自体には、比較方法の手がかりはありません。ソートされている型だけがそれを知っています。多くのユーザーが再利用できる比較ソートアルゴリズムを書くことはできず、ソートのために呼び出される可能性があるさまざまなタイプすべてを予測することはできません。あなたはその作業をユーザー自身に任せなければなりません。そこで、ここではsort、別名フレームワークはユーザーコードの中のメソッドを呼び戻します。型はソートされているので比較できます。 (または代理人を使用することもできます。同じ要点です。)

私はこれを正しくしましたか?

2
BillB

フレームワークはあなたが必要とするかもしれないいくつかの機能を持っています。あなたはたぶん作り付けの分類メカニズムを持っているある種の配列を必要とします。あるいは、コントロールを配置するウィンドウが必要な場合もあります。それらはすべてフレームワーク内にあります。それはあなた自身の仕事の枠組みにまたがる一種の仕事です。

編集:わかりました私はあなたが私たちに伝えようとしていたことを掘り下げることを考えています;)これはより深くそして深くなる前に、おそらく「枠をまたぐWORK ...」という行の間の情報に気づかなかったでしょう。私はあなたが喜んであなたを願ってそれに床を与えるようにします:
私がここで見つけた質問「図書館とフレームワークの違い」への良い説明
http://ifacethoughts.net/2007/06/04/difference-between-a-library-and-a-framework/

2
OlimilOops

フレームワークは特定の問題領域に機能性/解決策を提供します。
wiki :からの定義

コンピュータプログラミングにおけるソフトウェアフレームワークは、一般的な機能を提供する共通コードが特定の機能を提供するユーザコードによって選択的に無効にされるかまたは特殊化され得る抽象概念である。フレームワークは、明確に定義されたApplication Programming Interface(API;アプリケーションプログラミングインターフェイス)にラップされたコードの再利用可能な抽象化であるという点で、ソフトウェアライブラリの特別なケースです。

2
Soe Moe