オブジェクト指向言語の文法を覚えたら次は何を覚える?
まえがき
令和現在、プログラミングの入門を勉強する時、変数・関数・クラスなどの文法を覚えていき、それが出来たら今度はフレームワークの勉強に入っていくことが多いと思います。
それは実践的でいいと思いますが、並行してGOFのデザインパターンをいくつか勉強するとフレームワークが提供する機能の意味も理解が早くなったりします。
GOFのデザインパターンとは?
ググればでてきます。
が、ざっくり説明しますと、かつてオブジェクト指向言語が誕生した頃、the Gang of Fourというチームのとても頭いい4人の開発者が、「おのおのバラバラなやり方でクラスを使うより、パターン化して各パターンに名前をつけたら共同作業しやすいんじゃね?」みたいな事を考えて、いくつかの模範パターンを考えて世に公表しました。
これがGOFのデザインパターンです。
これによって、「このフォルダに入ってるクラスは◯◯パターンだよ」とか「これは▲▲パターンが使えるかも」などと、一言で伝えやすくなりました。
そして、現在のJavaやPHPなどのオブジェクト指向の多くのフレームワークではこのGOFの命名が活用されています。
さらに言えば、言語機能そのものに当たり前のように採用されているパターンもあります。
javascriptなどの関数型言語でも採用されているパターンも多い。
そのため、既にフレームワークの機能を十分活用している方は、GOFのデザインパターンを意識しなくても知らない間にその恩恵を受けています。
各パターンの詳細は気が向いたら別記事に書きますが、いくつか簡単に紹介します。
実はちょっと難し目の記事なら既に出てくるのでここでは私の好きなPHPのLaravelフレームワークでどう使われているか、という観点で書いていきます。
テンプレートパターン
クラス継承そのものです。
extends とか使ってれば自然に使っていることになります。
シングルトンパターン
あるクラスのインスタンスを1つしか作らないパターン。
Laravelではログ出力のLogManagerやルーティングを管理するRouter、セッション情報を管理するSessionManagerなどで採用されています。
サービスクラスのインスタンス生成方法でもsingletonという言葉が出てきますね。
アプリケーション全体で使いまわして構わないクラスはこれを使うわけです。
また、他のクラスのインスタンスを格納しておくコンテナクラスなどはこれを使わないと実現が難しい(不可能?)なものもあります。
ファクトリパターン
あるクラスのインスタンスを作るためのクラスを用意するパターン。
LaravelではデータベースのSeederで使われている。
クラスのインタンスはnewで作ればいいと思うかもしれないが、複雑な初期化処理が必要だったり、大量のインスタンスに別々の値を設定して初期値を代入したい場合など、コントローラクラスでやると莫大な量のコードが出来てしまう。
ビルダーパターン
これもクラスのインスタンスを作りやすくするパターン。
こちらはインスタンスの初期化を一気に完成させるのではなく、いくつかの工程で分割して組み合わせることができるようにするもの。
Laravelではクエリビルダーで頻繁に使うことになる。
一気にSQLを書き上げるのではなく、SELECT句、WHERE句、FROM句などをメソッドチェーンでつなげて組み上げるようになっていますよね。
おわりに
いかがでしたか?
意外と、「あ、これ見たことある!!」というのもあったと思います。
そしてこれらは特定のフレームワークに依存しないため、一度覚えるとフレームワークや言語の壁を超えて汎用的に使える知識となります。
自分が追加開発するときの参考にもなるため、少しづつ見ていきましょう。
株式会社ONE WEDGE
【Serverlessで世の中をもっと楽しく】 ONE WEDGEはServerlessシステム開発を中核技術としてWeb系システム開発、AWS/GCPを利用した業務システム・サービス開発、PWAを用いたモバイル開発、Alexaスキル開発など、元気と技術力を武器にお客様に真摯に向き合う価値創造企業です。
Discussion