はじめに
Spring Boot を触れていた時に先輩から「そのControllerはGeneration Gapパターンです」というアドバイスをいただきました。
Generation Gapパターンについて理解を深めるため、ここでまとめます。
要約
- Generation Gapパターン
- ソース自動生成ツールにはスーパークラスのソースだけを生成させる
- プログラマはそのサブクラスだけを作る
- インスタンス化するのはサブクラスだけ
- サブクラスの方では、スーパークラスのメソッドを継承したり、オーバーライドしたり、新規メソッドを追加したりする
- 自動生成ツールは中身をいろいろいじるけれど、サブクラスから使うインタフェース(API)は変えない
- 自動生成ツールはTemplate Methodの部分も変えない。自動生成ツールの存在を前提
Generation Gapパターン
ソフトウェアを開発する際に「どう作ればいいか悩むなぁ」と感じるときに、「こういう場合はこう作るときれいにできるよ」という設計パターンを、デザインパターンといいます。
今回は、そのデザインパターンの中の1つである Generation Gapパターン を紹介していきます。
現在、世の中には多くの自動生成ツールが存在します。それは一般にはとても便利なものなのですが、プログラマーが処理を追加するために手を加えると、再度自動生成ツールを使用しにくくなるという問題があります。
Generation Gapパターンは、継承を用いてこの課題を解決します。自動生成ツールは抽象クラスを生成し、プログラマーはその抽象クラスを継承した具象クラスを作成します。
図で表すと以下のような設計となります。
このアプローチにより、プログラマーが追加の処理を行う際は具象クラスのみを変更すればよいため、自動生成ツールを再実行しても、プログラマーが作成した部分が影響を受ける心配はありません。
まとめ
本記事ではGeneration Gapパターンの概要を説明しました。
名前だけを聞くと一見複雑に見えるかもしれませんが(私も難しそうに感じました)、抽象クラスと具象クラスの違いを理解していれば、比較的理解しやすいパターンでした。
また、デザインパターンについては理解したつもりでいましたが、まだ知らないパターンが多くあることに気づきました。今後も学習を続けていきたいと思います。