1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【デザインパターン】Generation Gapパターン

Posted at

はじめに

Spring Boot を触れていた時に先輩から「そのControllerはGeneration Gapパターンです」というアドバイスをいただきました。
Generation Gapパターンについて理解を深めるため、ここでまとめます。

要約

  • Generation Gapパターン
    • ソース自動生成ツールにはスーパークラスのソースだけを生成させる
    • プログラマはそのサブクラスだけを作る
    • インスタンス化するのはサブクラスだけ
    • サブクラスの方では、スーパークラスのメソッドを継承したり、オーバーライドしたり、新規メソッドを追加したりする
    • 自動生成ツールは中身をいろいろいじるけれど、サブクラスから使うインタフェース(API)は変えない
    • 自動生成ツールはTemplate Methodの部分も変えない。自動生成ツールの存在を前提

Generation Gapパターン

ソフトウェアを開発する際に「どう作ればいいか悩むなぁ」と感じるときに、「こういう場合はこう作るときれいにできるよ」という設計パターンを、デザインパターンといいます。
今回は、そのデザインパターンの中の1つである Generation Gapパターン を紹介していきます。

現在、世の中には多くの自動生成ツールが存在します。それは一般にはとても便利なものなのですが、プログラマーが処理を追加するために手を加えると、再度自動生成ツールを使用しにくくなるという問題があります。

Generation Gapパターンは、継承を用いてこの課題を解決します。自動生成ツールは抽象クラスを生成し、プログラマーはその抽象クラスを継承した具象クラスを作成します。

図で表すと以下のような設計となります。

このアプローチにより、プログラマーが追加の処理を行う際は具象クラスのみを変更すればよいため、自動生成ツールを再実行しても、プログラマーが作成した部分が影響を受ける心配はありません。

まとめ

本記事ではGeneration Gapパターンの概要を説明しました。
名前だけを聞くと一見複雑に見えるかもしれませんが(私も難しそうに感じました)、抽象クラスと具象クラスの違いを理解していれば、比較的理解しやすいパターンでした。

また、デザインパターンについては理解したつもりでいましたが、まだ知らないパターンが多くあることに気づきました。今後も学習を続けていきたいと思います。

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?