【最強の技術者集団】を謳う倍率200倍のアプリ会社に転職した。 転職は入ってみないとわからない チョコレートの箱のようなもの👦🎁✨ 転職後に初めて携わったプロジェクトが2名の技術者によるバックエンドで、DDDの思想を受けて作られたものであった。 ソースコードを見た この会社に入って良かった。 「当たりを引いたな🎁✨」と確信。*1 他の既存のシステムを拡張す …
タグ: オブジェクト指向
Switchとif elseif クソコード動画「Switch」から学ぶ
クソコード動画「switch文」 #ooc_2020 pic.twitter.com/USTrFcRCAS — ミノ駆動 (@MinoDriven) February 16, 2020 switch文, if elseif書くぞ! → Factory, Strategy, Stateを考える 毎日5分程でも開発定例MTG設ける(動画17秒付近) コミュニケーション大事 …
Managerクラス クソコード動画から学ぶ
クソコード動画「Managerクラス」#すえなみチャンス暑気払い pic.twitter.com/3FSQDkXfHu — ミノ駆動 (@MinoDriven) August 3, 2019 爆速レンタルサーバならConoHa WING サーバはプロに全部お任せ!「仕事」に専念したいあなたにおすすめです。 ConoHa VPSで運営してま🐱 サーバの勉強がしたいあなたにお …
共通化モジュール クソコード動画から学ぶ
クソコード動画「共通化の罠」 pic.twitter.com/MM750CNXc2 — ミノ駆動 (@MinoDriven) May 12, 2019 共通モジュールに特定クラスの分岐処理を入れてはいけない あってはいけない…😨 1分30秒付近でPMが個別に別れとけ!って言われてからクラスFがさらっと、分岐処理を追加するのが闇が深い。 分岐処理が未来で共通処 …
イミュータブルPHP クソコード動画「カプセル化」から学ぶ
クソコード動画「カプセル化」 pic.twitter.com/kAhXCEHYVT — ミノ駆動 (@MinoDriven) June 23, 2019 問題 データが書き換わってしまってしまう。 対応 イミュータブルにする getter/setterをつくらない ミュータブル(可変) client.php [cr …
デザパタ本を読んでオブジェクト脳ができるまで

オブジェクト脳ができるまで クラスの修飾子を把握する public protected privateの違い abstract, interfaceの違いを把握する デザパタ本を写経する Facadeあたりがわかるようになる 関連と集約の意味を把握する 関連・・・newで呼び出すが、呼び出したインスタンスはプロパティに保持しない 集約・・・プロパティにインスタンスを保持する UMLの …
Laravel リポジトリパターン

リポジトリパターンのスタイルにするのが勝ちパターンみたいなので覚える。 確かにわかりやすいし、テストしやすくなる。 テストの切り分け 本来はコントローラのテストだけ、DBのテストと別でテストできるものでなくてはならない 下記サイトを参考にやってみました。 https://www.ritolab.com/entry/165 /database/factori …
Abstarctとinterfaceの違い
interface ポリモーフィズムでの利用で使える @see ポリモーフィズムとはなにか?超わかりやすく解説します!(外部サイト) 外向け 不特定数 Abstract 継承の拡張 いくつも継承できる 複数の派生先クラスで一部の実装が異なる場合 @see interfaceとabstractの特徴と違いを捉える(外部サイト) 内部向け仕様 …
デザインパターン まとめ
Template Method abstract classして親は抽象クラスとして定義し、共通メソッドとクラス毎に処理が変わる処理をabstract methodを定義する 継承した子クラスは親クラスでabstractで指定したメソッドを実装することで、共通処理を保証しクラス毎に異なる処理を定義できる。 Singleton 1つのクラスに1インスタンスし …
PHP Facadeパターン
BuyController.class.php ※Facade適用前
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
<?php class BuyController extends Controller { private $userId; private $itemName; private $itemPrice; private $itemAmount; private $money; public function __construct($userId_, $itemName_, $itemPrice_, $itemAmount_, $money_) { $this->userId = $userId_; $this->itemName = $itemName_; $this->itemPrice = $itemPrice_; $this->itemAmount = $itemAmount_; $this->money = $money_; } public function Action_Buy() { try{ /** * 商品の合計値段を計算します。 */ $calcObj = new Calc($this->itemName, $this->itemAmount); $payment = $calcObj->calcer(); /** * 購入処理を行います。 */ $resisterObj = new resister($payment, $this->money); $resisterObj->resister(); /** * クーポンの発行を行います。 */ $coupon = new Coupon(); $coupon->publish($this->userId); }catch(Exception $e){ $logger = new Logger(); $logger->write($e->getMessage()); throw new Exception( 'エラー発生:' .get_class($this) ); } } } |
コントローラが肥大化する! コントローラにModel部分の処理が入ってきている…。 Facadeパターンを適用する Controllerで行っていたMod …
PHP Adapterパターン
使いどころ 既存のクラスに変更を加えたいが、直接ソースの変更を行いたくない。 WatchYoukai.class.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<?php /** * 指定されたファイルを表示するクラスです */ class WatchYoukai { private $filename; public function __construct($filename_) { if( !is_readable($filename_) ) { throw new Exception("エラー:{$filename_}は開くことが出来ません。"); } $this->filename = $filename_; } /** * ファイルを表示させます */ public function showPlain() { echo "<pre>"; echo htmlspecialchars(file_get_contents($this->filename), ENT_QUOTES, mb_internal_encoding()); echo "</pre>"; } /** * ファイルをハイライトで表示させます */ public function showHighLight() { highlight_file($this->filename); } } |
client.php
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php require_once 'WatchYoukai.class.php'; try{ $youkaiObj = new WatchYoukai('./WatchYoukai.class.php'); }catch(Excetion $e){ die($e->getMessage()); } $youkaiObj->showPlain(); echo "<hr/>"; $youkaiObj->showHighLight(); |
…
PHP Template Methodパターン [PHPによるデザインパターン入門]

絶版されているけれど、Google booksで公開されているのが見れます。 https://books.google.co.jp/books?id=sXNh4TeQeBIC&printsec=frontcover&hl=ja#v=onepage&q&f=false 1日1パターンってことで演習してアウトプットしていきます。 使いどころ 似たような処理 …