デザインパターン
ゴール
- デザインパターンについて浅く知る
- ここでは、メジャーなパターンやキーワードをいくつか知っておくとよい
- 聞いて習得できる知識ではない。実践が大事!
オブジェクト指向におけるデザインパターンとは
- ソフトウェアの設計に、建築工学で使われるデザインパターンを取り入れたもの
- 一言で言えば、よくある課題を解決できる設計集
- たとえば継承には Template Method パターン、委譲には Strategy パターンのように、設計の型がある
- モバイルアプリ開発では、委譲型の Delegation パターン、継承と委譲のどちらでもよい Adapter パターンとかが多用される
- GoF のデザインパターンと呼ばれる古典的デザインパターン以外に、言語やフレームワークによって新しいパターンが年々生まれ続けている
- 最近は言語やフレームワークの流儀に従っていれば自然と良いパターンに導かれることが多い
採用する利点
- 慣れてくると、他人のコードを「これは◯◯パターンだな」とか読める
- 技術者間の共通の用語としての価値
- Builder, Iterator, Observer, Singleton と言ったときに意思疎通が図りやすい
- 良い設計をするための教材としての価値
メジャーなデザインパターン
検索すればたくさん出てくるので、個人的に知っておいてほしいものだけ紹介
インスタンスの生成に関するパターン
- Factory Method
- 実際に生成されるインスタンスに依存しない、インスタンスの生成方法を提供する
- Abstract Factory
- 関連する一連のインスタンスを状況に応じて、適切に生成する方法を提供する
- Singleton
- あるクラスについて、アプリケーション内でインスタンスが単一であることを保証する
構造に関するデザインパターン
- Bridge
- クラスなどの実装と、呼出し側の間の橋渡しをするクラスを用意し、実装を隠蔽する
- Repository
- ビジネスロジックとデータ操作との間に 1 枚リポジトリレイヤーを挟み、データがサーバーにあるのか DB にあるのかとかを、ビジネスロジックが意識しないようにする
- Composite
- 再帰的な構造を表現する。Tree と呼ばれる場合もある
振る舞いに関するデザインパターン
- State
- 状態 1 つ 1 つを異なるクラスとし、あるインスタンスのクラスを切り替えることで状態を変化させる
- Iterator
- 複数の要素を内包するオブジェクトのすべての要素に対して、順番にアクセスする方法を提供する。反復子
- Observer
- インスタンスの変化を他のインスタンスから監視できるようにする。Listener とも呼ばれる
- Strategy
- データ構造に対して適用する一連のアルゴリズムをカプセル化し、アルゴリズムの切替えを容易にする
アーキテクチャーとは
- デザインパターンより上位の基本構造や設計思想のこと
- 家やビルを建てるときに考える設計と似ている
- メソッド/クラス/モジュール を、どのように 分離/結合 するか
- ソフトウェア、特に Kotlin やモバイルアプリまわりでよく聞くのは、MVVM, MVC, MVP, MVI, Flux, クリーンアーキテクチャーなど
- 詳しくは ACCESS テックブック 第 1 章 クリーンアーキテクチャー p 9 〜 13( 1.1 〜 1.4 節)を読んでください