blog.heartyfluid

勉強したることども

[イベント]第147回 PHP勉強会@東京

phpstudy.doorkeeper.jp

きのう表題のイベントをオンライン視聴した際のメモ。

細かすぎて伝わらないちょうぜつ本見どころ5選

#ちょうぜつ本こと『ちょうぜつソフトウェア設計――PHPで理解するオブジェクト指向の活用 』を先日上梓したばかりの田中ひさてるさんによる著者解題。

  • 伝わりやすい見どころ:Facade パターン
    • Facade パターンにおいて Facade と Features は 1:N
      • 1:1 はよくある誤解。Taylor OtwellGoF がなんといったか忘れたか
        • 用語は原義をふまえて踏襲しよう
  • 伝わらない見どころ
    1. ダーティ vs クリーン
      • クリーンアーキテクチャは層の内容を問わない!安定した中心に不安定な要素が依存していればよい
      • 求めるべき安定度は案件による
    2. 順に読むとネタかと思う流れ
      • DI コンテナ紹介 → シングルトン批判 → SingletonTrait のサンプルコード
        • 意図した流れ
      • シングルトンとは唯一無二。すなわち「概念と存在の区別がつかない」ものに使うのがよい
        • たとえば「神」
          • 時をつかさどる神 Time クラス
          • 数学をつかさどる神 Math クラス
        • PHP では True False Null
          • またユーザー空間では constenum
      • 表向きは「シングルトン使うな」であり、ほんとうの玄人向けには「State パターンで使います」
    3. 抽象クラスとインターフェイスの使い分け
      • 抽象クラス:サブカテゴリ
        • カテゴリは唯一いずれかの配下であるほうがわかりやすい
      • インターフェイス:「~とみなして使える」
        • 用途は多様にできたほうがよい
      • 「テクい」「強い」で武器を決めない。使い分けが大事
        • PofEAA の「クラステーブル継承」は抽象クラスでないと実現できない
    4. SOLID 原則の中で異色の存在 LSP「リスコフの置換原則」
    5. オブジェクト指向は構造化プログラミングではない
      • 構造化:上下の階層構造。上から下へ依存する。下が壊れると全体が壊れる
        • 『ちょうぜつ』の UML クラス図はすべて「依存の向き」を表現している
      • オブジェクト指向:「パッケージ」(もしくは「ユニット」)が「インターフェイス」で「結合」する。パッケージは単体でその品質が保証される
  • One More Thing: ひみつの参考文献

プログラムを実行するとはどういうことか

プログラムを実行するとはどういうことか / What does it mean to execute a program? - Speaker Deck

LT

PHP Open Textbook のお話

mikumoさん。

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 問題領域をモデル化する

『えこひいき』される関数たち

うさみけんたさん。

Trait

Trait - Google スライド

  • traituse するのは継承とは異なる
    • メソッド名の衝突とその解決
    • メソッドをコピペするようなものと思えばよい
    • 継承クラスの self は不変、トレイトの self は可変
  • トレイトの static な変数やメソッドにはクラス定義なしにアクセスできてしまう
    • PHP8.1 から deprecated