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