ソフトウェアフレームワークとは何ですか?[閉まっている]


193

誰かが私にソフトウェアフレームワークとは何か説明してもらえますか?なぜフレームワークが必要なのですか?プログラミングを容易にするためにフレームワークは何をしますか?

回答:


422

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


27
反対票を投じる理由を知りたいのですが。それは私がそれを改善するのに役立ちます。
Neha Choudhary 2014

4
とてもわかりやすいクールな...........ありがとう
ございました

25
@NehaChoudhary、私ではありませんが、彼は-1です。IoCがないため、あなたが話しているのはライブラリではなく、フレームワークだからです。
Pacerier 2014

11
私はあなたの投稿を読みましたが、あなたが投稿したことは、図書館ができることのように聞こえます。フレームワークとライブラリの違いを説明してみませんか?
Aaron Liu

2
わかりません。あなたが説明したことから、それは図書館のようなものでしょうか?
ルータ

92

技術的には必要ありません、フレームワーク。本当にシンプルなサイト(1992年のWebを思い浮かべてください)を作成している場合は、ハードコードされたHTMLといくつかのCSSですべてを実行できます。

また、最新のウェブアプリを作成する場合、実際には必要ありませんにそのためのフレームワークを使用する。

代わりに、必要なすべてのロジックを毎回作成することを選択できます。独自のデータ永続性/ストレージレイヤーを作成することも、忙しい場合は、すべてのデータベースアクセスに対してカスタムSQLを作成することもできます。独自の認証およびセッション処理レイヤーを作成できます。そして、あなた自身のテンプレートレンダリングロジック。そして、あなた自身の例外処理ロジック。そして、あなた自身のセキュリティ機能。そして、すべてが正常に機能することを確認するための独自の単体テストフレームワーク。そして、あなた自身のもの... [かなり長い間続きます]

その後、再び、あなたがあれば行うフレームワークを使用します、あなたは通常、良いの恩恵を受けることができるでしょう査読と非常によく、数十人だけでなく、あなたよりも良いかもしれません他の開発者のいない場合は何百もの仕事をテストしました。上記のインフラストラクチャアイテムの作成や時間をかけずに、必要なものをすばやく構築できます。

短時間でより多くのことを成し遂げることができ、使用または拡張しているフレームワークコードは、すべてを自分で行うよりも優れている可能性が高いことを知っています。

そして、この費用は?フレームワークを学ぶために時間を費やす。しかし、事実上すべてのWeb開発者が証明するように、選択したフレームワークを使用することで、大規模な(実際には大規模な)メリットを得るには、時間を費やす価値があります。


17
あなた自身のものを打ち砕くのではなく、オープンソースのフレームワークに貢献することにそのエネルギーを入れてみませんか?「一人で、岩を動かすことができます。一緒に私たちは山を動かすことができます 'そしてそのすべて
Steve Jalim

7
@Jefffrey「では、どのようにして学習しますか?プログラマーとしてどのように成長しますか?」好きな方法で学習できますが、実際のクライアントのために働くつもりであれば、最短の時間で可能な限り最高のソリューションを提供する必要があります。あなたの「おそらくバグのある」コードはそのために受け入れられません。
Cmorales 2013

6
@Cmorales、プログラミング言語やドメイン固有の問題を学びたいのであれば、「本当の」クライアントは確かにありません(そして、あなたはおそらく多くの時間をあなたの手に持っているでしょう)そしてそれが私が初心者を提案する理由ですフレームワークから始めないでください。

3
@Jefffreyあなたはコメントで初心者について何も言わなかった、それは一般的でした。最初にあなた自身で学ぶべきだと私は同意しますが、あなたのコメントはそれを指定していませんでした、そして実際の(仕事の)生活ではあなたが学ぶためだけにバグのあるコードを使う余裕はありません。私はフレームワークを使用しない人もいます。彼らは彼らがよりよく知っていると思っているからです...そして、各プロジェクトに2倍の時間を費やしています。
Cmorales 2013

1
@Cmoralesフレームワークを使用しているが、各プロジェクトに2倍の時間がかかる人もいます。プログラミング速度は、常に使用されているツールに関係があるとは限りません。
サイファー2014年

53

ウィキペディア(ソフトウェアフレームワーク)の要約(最初のgoogleヒットbtw)はそれを非常によく説明しています:

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

ソフトウェアフレームワークには、ライブラリや通常のユーザーアプリケーションからそれらを分離する次のような特徴的な機能があります。

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

これには、アプリケーションの開発時に優れたショートカットが提供される可能性があるため、これが「必要」になる場合があります。これには、すでに記述およびテストされた機能が多数含まれているためです。その理由は、ソフトウェアライブラリを使用する理由とよく似ています。


13
質問のタイプによると、回答の白い部分は灰色の部分よりもはるかに優れていました...
OlimilOops

質問をした人もウィキペディアのエントリを見つけたと思います...彼/彼女はおそらくより包括的な答えを探しました。
Stophface 2018年

31

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

かなり簡略化して、実際の機能を除いて完全なアプリケーションとしてフレームワークを見ることができます。機能とさきがけを差し込みます!あなたはアプリケーションを持っています。

たとえば、GUIフレームワークについて考えてみましょう。フレームワークには、アプリケーションを作成するために必要なすべてが含まれています。実際、ほとんど何もしないソース行がほとんどない最小限のアプリケーションを簡単に作成できることがよくあります。ただし、ウィンドウ管理、サブウィンドウ管理、メニュー、ボタンバーなどが提供されます。それがフレームワークの側面です。アプリケーションの機能を追加してフレームワークの適切な場所に「プラグイン」することで、ウィンドウ管理などを行うだけのこの空のアプリを、実際の本格的なアプリケーションに変えることができます。

Webアプリ、サーバーサイドアプリなどのフレームワークには同様のタイプがあります。どちらの場合も、フレームワークは、(できれば)面倒で反復的なコードの大部分を提供し、実際の問題ドメイン機能を提供します。(これは理想です。実際には、もちろん、フレームワークの成功には大きなばらつきがあります。)

これは、フレームワークが何であるかを単純化したものであることを改めて強調します。ほとんどのフレームワークにはこのような恐ろしい概念が組み込まれていますが、「制御の反転」などの恐ろしい用語は使用していません。あなたは初心者なので、私はあなたに専門用語を惜しまないで、簡単な微笑みで行くと思いました。


14

「フレームワーク」の明確な定義があるかどうかはわかりません。ライブラリの大きなセットはフレームワークと呼ばれることもありますが、この言葉の典型的な使用法はaioobeの定義に近いと思います。

この非常に素晴らしい記事は、ライブラリのセットとフレームワークの違いを要約しています。

フレームワークは、「私たちに電話しないで、私たちはあなたに電話します」と言うライブラリのセットとして定義できます。

フレームワークはどのように役立ちますか?何かを最初から作成するのではなく、基本的には、所定の機能するアプリケーションを拡張するだけだからです。この方法で多くの生産性が得られます-結果として得られるアプリケーションは、同じ時間枠で自分で行うよりもはるかに複雑になる場合がありますが、通常は多くの柔軟性を犠牲にしています。


8

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

フレームワークは一般に、より複雑なアプリケーションを作成するために使用および拡張できるいくつかの基本機能を提供します。あらゆる種類のフレームワークがあります。MicrosoftのMVCフレームワークは、この良い例です。MVCパターンを使用して地上の建物のWebサイトから降りるために必要なすべてを提供し、Webリクエスト、ルートなどを処理します。あなたがしなければならないのは、「コントローラー」を実装し、MVCフレームワークによって定義された2つの構成体である「ビュー」を提供することだけです。MVCフレームワークは、コントローラーの呼び出しとビューのレンダリングを処理します。

おそらく最良の文言ではありませんが、それが役に立てば幸いです


1
実際には、より多くのアプリケーションを構築するようなものだ比べて足場の周りのこと。
イェルクWミッターク

4

最下位レベルでは、フレームワークは環境であり、作業するための一連のツールが提供されます

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

このいわゆる「環境」は、基本的な設定(エラーレポート、ログファイル、言語設定など)を提供します...変更、拡張、および構築することができます。

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

人々はフレームワークでそれを正当化するでしょう、あなたはゼロからコーディングする必要はありません。しかし、それらはライブラリとフレームワークを混同している人々に過ぎません。

ここでは偏見はありませんが、実際には現在フレームワークを使用しています。


4

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


2

フレームワークは、特定の問題領域に機能性/ソリューションを提供します。wiki
からの定義:

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


最初の文に「抽象」という言葉があります。それはどういう意味ですか?どこで抽象化を使用しますか?
Kumaresan Perumal 2017

2

フレームワークは、「作成済み」を使用するのに役立ちます。メタフォアは次のようになります。

地球の素材はプログラミング言語だと思い、

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


2

フレームワークには、必要な機能がいくつかあります。おそらく、並べ替えメカニズムが組み込まれたある種の配列が必要です。あるいは、いくつかのコントロールを配置したいウィンドウが必要な場合もありますが、それらはすべてフレームワークで見つけることができます。それはあなた自身の作品の周りのフレームにまたがる一種の作品です。

編集:OK私はあなたたちが私に伝えようとしていたことを掘り出そうとしています;)おそらく、これがより深く、より深く落ちる前に、「フレームにまたがるWORK ...」という行の間の情報に気付かなかったでしょう。私はあなたが無事に終了することを願ってそれにフロアを与えようとします:
「ライブラリとフレームワークの違い」という質問への良い説明は私がここで見つけました
http://ifacethoughts.net/2007/06/04/difference-between-ライブラリーとフレームワーク/


完全に反対票を理解していません...私はそれについて完全にびっくりしています。質問は初心者の基本的な質問のようなものであり、私の答えはそれはかなり良かったとしています...
OlimilOops

4
明確にするために、私は反対票を投じなかった。しかし、あなたが話していることは、フレームワークが懸念していることよりもはるかに低いレベルにあります。たとえば、コレクションと並べ替えアルゴリズムは、フレームワークよりも標準ライブラリです。
bakkal

1
答えてくれてありがとうございます...私の質問に対する答えではありません。OPの質問によると、「標準ライブラリ」と「フレームワーク」を区別することはここでは間違った場所です。たとえば、.net-frameworkで、名前空間コレクションをフレームワークの一部に見つけることができます。名前空間コレクションは.netframeworkの一部ではないと誰もが聞いたことはありません。だから私の質問に対するあなたの答えは間違っています
OlimilOops

1
これがライブラリの定義です。ライブラリとは対照的に、フレームワークの特徴であるInversion of Controlがありません
イェルクWミッターク

2

すでに理解している場合にのみ理解できる定義を超えて、例が役立ちました。

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.