# 共通ドキュメント

## Frameworkの概要

### 概要

- フレームワークとは
- 色々なフレームワーク
- デザインパターン

### フレームワークとは

#### wikipediaによる定義

ソフトウェアフレームワーク
  プログラミングにおいて、ジェネリックな機能を提供する共通コードを特化した機能を提供するユーザーコードで選択的に上書きしたり特殊化したりすることができる抽象化である。
アプリケーションフレームワーク
  プログラミングにおいて、特定のオペレーティングシステムのためのアプリケーションの標準構造を実装するのに使われるクラスやライブラリの集まりである。

#### e-wordsによる定義

フレームワーク

  フレームワークとは、枠組み、下部構造、構造、組織という意味の英単語。

  ソフトウェアの世界では、アプリケーションソフトを開発する際に頻繁に必要とされる汎用的な機能をまとめて提供し、アプリケーションの土台として機能するソフトウェアのこと。アプリケーションの雛型。開発にフレームワークを利用すると、独自に必要とされる部分だけを開発すれば済むため開発効率の向上が見込める。具体的なソフトウェアだけでなく、汎用的に適用できるプログラムの設計モデルや典型的な処理パターンなどを含めてフレームワークと呼ぶ場合もある。

#### 問題解決のための定義

プログラムの基本構造の定義

#### 例 - コントロールブレーク処理基本構造の定義

- リストの終わりまで[処理]を実行する
- 前のブレークキーと現在のブレークキーを比較する
- ブレークしたときに[処理]を実行する

    ///コントロールブレーク用リストのアイテムの抽象
    abstract class BreakableItem{
    	abstract bool KeyEquals(BreakableItem previousItem);
    }

    ///コントロールブレーク処理の抽象
    abstract class ControlBreak{
    	List items;
    	void MainProcess(){
    		BreakableItem previousItem = null;
    		foreach(BreakableItem item in items){
    			//ブレークしたら[処理]を実行
    			if(!item.KeyEquals(previousItem)){
    				this.OnBreak();
    			}
    			//明細に対する[処理]
    			this.ProcessItem();

    			previousItem = item;
    		}
    		//if needed last ??
    		if(...){
    			OnBreak;
    		}

    	}
    	abstract void OnBreak();
    	abstract void ProcessItem(BreakableItem item);
    }

### いろいろなフレームワーク

名前 | 対象言語、環境
--- | ---
MFC(Microsoft Foundation Class) | C++
Visual Basic | Visual Basic
.Net Framework | C#,VB,C++,J#,...(.Net環境)
ASP.Net | C#,VB,C++,J#,...(.Net環境)
ASP.Net MVC | C#,VB,C++,J#,...(.Net環境)
Struts | JAVA(Servlet/JSP)
Spring | JAVA
CakePHP | PHP
Symfony | PHP
Zend Framework | PHP
CodeIgniter | PHP
Ruby on Rails | Ruby
Django | Python
GWT | JAVA

### デザインパターン

#### wikipediaによる定義

デザインパターン
  過去のソフトウェア設計者が発見し編み出した設計ノウハウを蓄積し、名前をつけ、再利用しやすいように特定の規約に従ってカタログ化したものである。

Gang of Four

#### GoF(Gang of Four)による23のパターン

- 生成
- 構造
- 振る舞い

#### その他

##### ソフトウェアアーキテクチャ

- クライアントサーバー
- 三階層モデル
- MVC

フッター