はむはむエンジニアぶろぐ

365日エンジニアリング

デザインパターン

PHPでStrategyパターンを実装してみた

GoFのデザインパターンの一つStrategyパターンをPHPで実装してみた。 Strategyとは「戦略」のことで、戦略とはアルゴリズムのことを指しています。 Strategyパターンは、アルゴリズム(振る舞い)をカプセル化し振る舞いの差替えや追加、削除をしやすくするも…

【AOP】ProxyパターンとDIコンテナを使ったアスペクト指向プログラミング

ProxyパターンとDIコンテナを使うことで、アスペクト指向プログラミングを実現できます。 アスペクト指向は、オブジェクト指向で解決しにくい問題を解決しましょうというパラダイムです。 今回のアスペクト指向プログラミングの対象は、ロギングです。 言語…

Decoratorパターンで既存のクラスに機能追加をする

Decoratorパターンは、GoFのデザインパターンの一つです。 既存のオブジェクトに新しい機能や振る舞いを動的に追加することを可能にする。 Decoratorパターン - wikipedia 既存のクラスに対して、機能追加を行おうというものです。 ここで、重要なのが既存の…

Adapterパターンでドメインレイヤと技術レイヤを分離する

ドメインを理解するために、ソースコードを読んでいて読みにくさを感じる瞬間の一つにドメインレイヤと技術レイヤの話が混じっている場合です。 ドメインとして関心があるのは、どんなデータを扱うのか?どういう振る舞いをするか?です。 技術レイヤの話は…

PHPでValueObjectを実装してみる

ValueObjectは、getterしかないオブジェクトです。 getterしか無いって何が嬉しいの?って感じかもしれませんが、特定の概念を説明する集合体として表現できます。 ようは、コードに概念の集合を語らせることが出来ます。 簡単なパターンなので、覚えること…

ファットコントローラはFacadeパターンで撲滅しよう

MVCのコントローラのレガシーコードによくあるのが、ファットコントローラです。 最初は、単純なロジックだけだったのでコントローラに書かれていたロジックが月日を追うごとに肥大化して誰も読めなくなったというのはあるあるです。 ファットコントローラの…