回答:
私はそれに答えるのがとても遅いです。しかし、私が今日考えただけの例を共有したいと思います。5m x 5mの紙を切るように言ったら、きっとそうするでしょう。しかし、同じ寸法の紙を1000枚カットするように依頼したとします。この場合、1000回の測定は行いません。明らかに、5m x 5mのフレームを作成し、それを利用することで、より短い時間で1000枚の紙をカットすることができます。それで、あなたがしたことは特定のタイプの仕事をするフレームワークを作ることでした。同じタイプのアプリケーションに対して同じタイプのタスクを何度も実行する代わりに、これらすべての機能を1つの素敵なパケットにまとめたフレームワークを作成し、アプリケーションとより重要な多くのアプリケーションに抽象化を提供します。
技術的には必要ありません、フレームワーク。本当にシンプルなサイト(1992年のWebを思い浮かべてください)を作成している場合は、ハードコードされたHTMLといくつかのCSSですべてを実行できます。
また、最新のウェブアプリを作成する場合、実際には必要ありませんにそのためのフレームワークを使用する。
代わりに、必要なすべてのロジックを毎回作成することを選択できます。独自のデータ永続性/ストレージレイヤーを作成することも、忙しい場合は、すべてのデータベースアクセスに対してカスタムSQLを作成することもできます。独自の認証およびセッション処理レイヤーを作成できます。そして、あなた自身のテンプレートレンダリングロジック。そして、あなた自身の例外処理ロジック。そして、あなた自身のセキュリティ機能。そして、すべてが正常に機能することを確認するための独自の単体テストフレームワーク。そして、あなた自身のもの... [かなり長い間続きます]
その後、再び、あなたがあれば行うフレームワークを使用します、あなたは通常、良いの恩恵を受けることができるでしょう査読と非常によく、数十人だけでなく、あなたよりも良いかもしれません他の開発者のいない場合は何百もの仕事をテストしました。上記のインフラストラクチャアイテムの作成や時間をかけずに、必要なものをすばやく構築できます。
短時間でより多くのことを成し遂げることができ、使用または拡張しているフレームワークコードは、すべてを自分で行うよりも優れている可能性が高いことを知っています。
そして、この費用は?フレームワークを学ぶために時間を費やす。しかし、事実上すべてのWeb開発者が証明するように、選択したフレームワークを使用することで、大規模な(実際には大規模な)メリットを得るには、時間を費やす価値があります。
ウィキペディア(ソフトウェアフレームワーク)の要約(最初のgoogleヒットbtw)はそれを非常によく説明しています:
コンピュータプログラミングにおけるソフトウェアフレームワークは、一般的な機能を提供する一般的なコードを、特定の機能を提供するユーザーコードによって選択的にオーバーライドまたは特化できる抽象化です。フレームワークは、明確に定義されたアプリケーションプログラミングインターフェイス(API)にラップされた再利用可能なコードの抽象化であるという点で、ソフトウェアライブラリの特別なケースです。
ソフトウェアフレームワークには、ライブラリや通常のユーザーアプリケーションからそれらを分離する次のような特徴的な機能があります。
- 制御の反転 -フレームワークでは、ライブラリや通常のユーザーアプリケーションとは異なり、プログラム全体の制御フローは呼び出し元ではなくフレームワークによって決定されます。[1]
- デフォルトの動作 -フレームワークにはデフォルトの動作があります。このデフォルトの動作は、実際にはいくつかの有用な動作であり、一連の何もしない必要があります。
- 拡張性 -フレームワークは、通常、選択的なオーバーライドによってユーザーが拡張するか、特定の機能を提供するユーザーコードによって特殊化できます。
- 変更不可能なフレームワークコード -フレームワークコードは、通常、変更することはできません。ユーザーはフレームワークを拡張できますが、コードを変更することはできません。
これには、アプリケーションの開発時に優れたショートカットが提供される可能性があるため、これが「必要」になる場合があります。これには、すでに記述およびテストされた機能が多数含まれているためです。その理由は、ソフトウェアライブラリを使用する理由とよく似ています。
良い答えはたくさんありますが、別の見方をすることができるかどうか見てみましょう。
かなり簡略化して、実際の機能を除いて完全なアプリケーションとしてフレームワークを見ることができます。機能とさきがけを差し込みます!あなたはアプリケーションを持っています。
たとえば、GUIフレームワークについて考えてみましょう。フレームワークには、アプリケーションを作成するために必要なすべてが含まれています。実際、ほとんど何もしないソース行がほとんどない最小限のアプリケーションを簡単に作成できることがよくあります。ただし、ウィンドウ管理、サブウィンドウ管理、メニュー、ボタンバーなどが提供されます。それがフレームワークの側面です。アプリケーションの機能を追加してフレームワークの適切な場所に「プラグイン」することで、ウィンドウ管理などを行うだけのこの空のアプリを、実際の本格的なアプリケーションに変えることができます。
Webアプリ、サーバーサイドアプリなどのフレームワークには同様のタイプがあります。どちらの場合も、フレームワークは、(できれば)面倒で反復的なコードの大部分を提供し、実際の問題ドメイン機能を提供します。(これは理想です。実際には、もちろん、フレームワークの成功には大きなばらつきがあります。)
これは、フレームワークが何であるかを単純化したものであることを改めて強調します。ほとんどのフレームワークにはこのような恐ろしい概念が組み込まれていますが、「制御の反転」などの恐ろしい用語は使用していません。あなたは初心者なので、私はあなたに専門用語を惜しまないで、簡単な微笑みで行くと思いました。
「フレームワーク」の明確な定義があるかどうかはわかりません。ライブラリの大きなセットはフレームワークと呼ばれることもありますが、この言葉の典型的な使用法はaioobeの定義に近いと思います。
この非常に素晴らしい記事は、ライブラリのセットとフレームワークの違いを要約しています。
フレームワークは、「私たちに電話しないで、私たちはあなたに電話します」と言うライブラリのセットとして定義できます。
フレームワークはどのように役立ちますか?何かを最初から作成するのではなく、基本的には、所定の機能するアプリケーションを拡張するだけだからです。この方法で多くの生産性が得られます-結果として得られるアプリケーションは、同じ時間枠で自分で行うよりもはるかに複雑になる場合がありますが、通常は多くの柔軟性を犠牲にしています。
簡単な説明は次のとおりです。フレームワークは、アプリケーションを構築できる足場です。
フレームワークは一般に、より複雑なアプリケーションを作成するために使用および拡張できるいくつかの基本機能を提供します。あらゆる種類のフレームワークがあります。MicrosoftのMVCフレームワークは、この良い例です。MVCパターンを使用して地上の建物のWebサイトから降りるために必要なすべてを提供し、Webリクエスト、ルートなどを処理します。あなたがしなければならないのは、「コントローラー」を実装し、MVCフレームワークによって定義された2つの構成体である「ビュー」を提供することだけです。MVCフレームワークは、コントローラーの呼び出しとビューのレンダリングを処理します。
おそらく最良の文言ではありませんが、それが役に立てば幸いです
最下位レベルでは、フレームワークは環境であり、作業するための一連のツールが提供されます
このツールは、ライブラリ、構成ファイルなどの形式で提供されます。
このいわゆる「環境」は、基本的な設定(エラーレポート、ログファイル、言語設定など)を提供します...変更、拡張、および構築することができます。
人々は実際にはフレームワークを必要としません、それは単に時間を節約したいという問題であり、他の人は個人的な好みの問題です。
人々はフレームワークでそれを正当化するでしょう、あなたはゼロからコーディングする必要はありません。しかし、それらはライブラリとフレームワークを混同している人々に過ぎません。
ここでは偏見はありませんが、実際には現在フレームワークを使用しています。
フレームワークは、特定の問題領域に機能性/ソリューションを提供します。wiki
からの定義:
コンピュータプログラミングにおけるソフトウェアフレームワークは、一般的な機能を提供する一般的なコードを、特定の機能を提供するユーザーコードによって選択的にオーバーライドまたは特殊化できる抽象化です。フレームワークは、明確に定義されたアプリケーションプログラミングインターフェイス(API)にラップされた再利用可能なコードの抽象化であるという点で、ソフトウェアライブラリの特別なケースです。
フレームワークには、必要な機能がいくつかあります。おそらく、並べ替えメカニズムが組み込まれたある種の配列が必要です。あるいは、いくつかのコントロールを配置したいウィンドウが必要な場合もありますが、それらはすべてフレームワークで見つけることができます。それはあなた自身の作品の周りのフレームにまたがる一種の作品です。
編集:OK私はあなたたちが私に伝えようとしていたことを掘り出そうとしています;)おそらく、これがより深く、より深く落ちる前に、「フレームにまたがるWORK ...」という行の間の情報に気付かなかったでしょう。私はあなたが無事に終了することを願ってそれにフロアを与えようとします:
「ライブラリとフレームワークの違い」という質問への良い説明は私がここで見つけました
http://ifacethoughts.net/2007/06/04/difference-between-ライブラリーとフレームワーク/
すでに理解している場合にのみ理解できる定義を超えて、例が役立ちました。
.Netでリストを並べ替えるのをじっと見ていると、私は少し理解したと思います。特定の機能を提供するユーザーコードによって調整された機能を提供するフレームワークの例。List.Sort(IComparer)を取ります。Sortメソッドの.Netフレームワークにあるソートアルゴリズムは、一連の比較を行う必要があります。オブジェクトAはオブジェクトBの前または後に来ますか?しかし、ソート自体には、比較を行う方法の手掛かりがありません。ソートされるタイプだけがそれを知っています。多くのユーザーが再利用できる比較ソートアルゴリズムを記述できず、ソートを要求されるさまざまなタイプすべてを予測できませんでした。その作業はユーザー自身に任せる必要があります。したがって、ここでは、フレームワークとも呼ばれる、ユーザーコード内のメソッドをコールバックします。型は、比較できるようにソートされています。(または、デリゲートを使用できます。
私はこれを正しく理解しましたか?