きのう表題のイベントをオンライン視聴した際のメモ。
細かすぎて伝わらないちょうぜつ本見どころ5選
#ちょうぜつ本こと『ちょうぜつソフトウェア設計――PHPで理解するオブジェクト指向の活用 』を先日上梓したばかりの田中ひさてるさんによる著者解題。
- 伝わりやすい見どころ:Facade パターン
- Facade パターンにおいて Facade と Features は 1:N
- 1:1 はよくある誤解。Taylor Otwell は GoF がなんといったか忘れたか
- 用語は原義をふまえて踏襲しよう
- 例:「カリー化は部分適用ではない」
- 関数型プログラミングにおける「ファンクタ」関数を呼び出す側の概念だった
- それが C++ では呼び出される関数の側の概念に…
- 「オブジェクト指向」は定義できない
- 例:「カリー化は部分適用ではない」
- 用語は原義をふまえて踏襲しよう
- 1:1 はよくある誤解。Taylor Otwell は GoF がなんといったか忘れたか
- Facade パターンにおいて Facade と Features は 1:N
- 伝わらない見どころ
- ダーティ vs クリーン
- クリーンアーキテクチャは層の内容を問わない!安定した中心に不安定な要素が依存していればよい
- 求めるべき安定度は案件による
- 順に読むとネタかと思う流れ
- DI コンテナ紹介 → シングルトン批判 →
SingletonTrait
のサンプルコード- 意図した流れ
- シングルトンとは唯一無二。すなわち「概念と存在の区別がつかない」ものに使うのがよい
- たとえば「神」
- 時をつかさどる神
Time
クラス - 数学をつかさどる神
Math
クラス
- 時をつかさどる神
- PHP では
True
False
Null
- またユーザー空間では
const
やenum
も
- またユーザー空間では
- たとえば「神」
- 表向きは「シングルトン使うな」であり、ほんとうの玄人向けには「State パターンで使います」
- DI コンテナ紹介 → シングルトン批判 →
- 抽象クラスとインターフェイスの使い分け
- SOLID 原則の中で異色の存在 LSP「リスコフの置換原則」
- オブジェクト指向は構造化プログラミングではない
- ダーティ vs クリーン
- One More Thing: ひみつの参考文献
- ボブおじさんが好きで著書を参考文献に入れている
- アジャイルソフトウェア開発の奥義
- SOLID 原則、パッケージ原則
- Clean Architecture 達人に学ぶソフトウェアの構造と設計
- 『奥義』 + クリーンアーキテクチャ
- Clean Agile 基本に立ち戻れ
- アジャイルについてプロセスでなく原典のアジャイルソフトウェア開発宣言に戻ることを提唱
- Clean Craftsmanship 規律、基準、倫理
- TDD と職業倫理
- 参考文献リストに入っていないのは原稿 FIX 後に出た本だから。すばらしい本
- アジャイルソフトウェア開発の奥義
- ボブおじさんが好きで著書を参考文献に入れている
プログラムを実行するとはどういうことか
プログラムを実行するとはどういうことか / What does it mean to execute a program? - Speaker Deck
- プログラムの「実行」いろいろ
- CPU がそのまま実行できるものを実行する
- CPU がそのまま実行できないものを実行する
- インタープリタ:CPU がそのまま実行できないものを実行する
LT
PHP Open Textbook のお話
mikumoさん。
- PHP Open Textbookを1月1日よりベータ公開予定 ~商用非商用を問わず無償での改変権、利用権を付与~ – PHP技術者認定機構
- 初心者が困っている例:実習環境が自分で作れない
- OS やアプリケーションがバージョンアップして、書籍の情報が古くなった?
- 書籍に初心者向けの説明が足りない?
- 環境構築は指導する側にとって説明したい本筋ではない?
- → PHP Open Textbook を参照するようにすれば楽ができる。ネットの海をさまよわなくていい!
- まずは興味を持ってもらうのが目的。PHP7初級試験への橋渡し
- 2023年1月1日ベータ公開予定。お手柔らかにフィードバックを
Laravel コアファイルのコードリーディング Model::all()
から new PDO()
まで追ってみた
Laravelコアファイルのコードリーディング/Reading the core code of Laravel - Speaker Deck
- なぜコアファイルを読もうと思ったか
- 好奇心
- 仕事ではコアの奥底まで読むことがない
- コードリーディングの練習
Model::all()
からnew PDO()
まで- Connector (シングルトン)
- クエリビルダー
- Eloquent のビルダー
- Model の Collection
- コアファイルを読むメリット
CUPID について5分でわかりやすく解説してみる
Seiichi Akiba さん。
- CUPID—for joyful coding - Dan North & Associates Ltd
- CUPID は SOLID 原則に代わる5つの Properties
- Properties はルールでなく目標
- Composable 組み立てやすい
- 最小限の依存関係を保つ。意図がわかりやすい
- Unix 哲学
- シンプルで一貫性のあるモデル
- Predictable 予測可能
- 期待通りに動作し決定論的、観察可能
- Idiomatic 自然に感じる
- 自分にとって読みやすいコードでなく言語のイディオムを尊重する
- ローカルなイディオムのガイドラインを持つ
- Domain-based 問題領域をモデル化する
『えこひいき』される関数たち
うさみけんたさん。
- 前置き:ZendEngineにえこひいきされる標準関数たち (前篇) - Qiita
- オペコードにおける関数呼び出し
INIT_FCALL
- しかしたとえば
is_int()
はTYPE_CHECK
命令に strlen('foo')
はECHO 3
に!
- しかしたとえば
- 本題:ZendEngineにえこひいきされる標準関数たち (後篇) - Qiita
Trait
trait
をuse
するのは継承とは異なる- メソッド名の衝突とその解決
- メソッドをコピペするようなものと思えばよい
- 継承クラスの
self
は不変、トレイトのself
は可変
- トレイトの static な変数やメソッドにはクラス定義なしにアクセスできてしまう
- PHP8.1 から deprecated