Upgrade to Pro — share decks privately, control downloads, hide ads and more …

抽象化という思考のツール - 理解と活用 - / Abstraction-as-a-Tool-...

抽象化という思考のツール - 理解と活用 - / Abstraction-as-a-Tool-for-Thinking

2025-07-18 PHP カンファレンス関西 2025

Avatar for shin1x1

shin1x1

July 20, 2025
Tweet

More Decks by shin1x1

Other Decks in Programming

Transcript

  1. D .BTBTIJ4IJOCBSB!TIJOY ந৅Խྫͦ͹Ί͠ ͦ͹Ί͠ w ৯ࣄ w ͦ͹ w ͝൧

    w ೑ w ιʔε w ᖱΊΔ w ਆށൃ঵ w ϑΝʔετϑʔυ w ͍҆ w FUD
  2. D .BTBTIJ4IJOCBSB!TIJOY ͦ͹Ί͠ w ৯ࣄ w ͦ͹ w ͝൧ w

    ιʔε w ᖱΊΔ w ਆށൃ঵ w ϑΝʔετϑʔυ w ͍҆ w FUD ͦ͹Ί͠Ϩγϐ w ͦ͹ w ͝൧ w ᖱΊΔ w ιʔε ந৅Խྫͦ͹Ί͠ จ຺ͦ͹Ί͠Λ࡞Δ จ຺ʹଈͨ֓͠೦
  3. D .BTBTIJ4IJOCBSB!TIJOY ͦ͹Ί͠ w ৯ࣄ w ͦ͹ w ͝൧ w

    ιʔε w ᖱΊΔ w ਆށൃ঵ w ϑΝʔετϑʔυ w ͍҆ w FUD ͦ͹Ί͠Ϩγϐ w ͦ͹ w ͝൧ w ᖱΊΔ w ιʔε ந৅Խྫจ຺ʹΑͬͯந৅͸ҟͳΔ จ຺#ڃάϧϝಛू #ڃάϧϝ w ϑΝʔετϑʔυ w ਆށൃ঵ w ஍ݩͰਓؾ จ຺ͦ͹Ί͠Λ࡞Δ
  4. D .BTBTIJ4IJOCBSB!TIJOY ޷͖ͳந৅ϑΝΠϧ w PQFO w SFBE w XSJUF w

    DMPTF QBUIUPJNBHFKQH ϑΝΠϧσʔλ͕ೖ͍ͬͯΔ ϑΝΠϧ
  5. D .BTBTIJ4IJOCBSB!TIJOY ӬଓԽσόΠεʢ)%%ɺ44%౳ʣΠϝʔδ      B C

    D E F w σόΠε্ͷ෺ཧҐஔʹอଘ w ಉ͡ϑΝΠϧͷσʔλ΋෼ׂ͞ΕΔ w C C EΛಡΜͰ࿈݁͢Δ w ϑΝΠϧσʔλ΋ϝλσʔλ΋ಉ͡σʔλ JNBHFKQHϑΝΠϧσʔλ ϑΝΠϧϝλσʔλ
  6. ந৅Λઌʹ࡞Δྫ interface UserRepositoryInterface { public function findById(int $id): ?User; public

    function store(User $user): void; } final class FooUseCase { public function __construct(private UserRepositoryInterface $userRepository) { } public function execute(int $id): void { $user = $this->userRepository->findById($id); // Կ͔ͷॲཧ $this->userRepository->store($user); } }
  7. ❌ϝιου಺ʹҟͳΔந৅౓͕ࠞࡏ public function run(int $userId, int $value): User { //

    ந৅౓௿ɿDB ΞΫηε $conn = new PDO('mysql:host=localhost', 'user', 'pass'); $stmt = $conn->prepare('SELECT * FROM users WHERE id = ?'); $stmt->execute([$userId]); $user = $stmt->fetchObject(User::class); // ந৅౓ߴ: ϏδωεϩδοΫͰ஋Λܭࢉ $someValue = $user->value + $value; // Կ͔ෳࡶͳܭࢉ // ந৅౓ఈɿ஋Λอଘ $updateStmt = $conn->prepare('UPDATE users SET value = ? WHERE id = ?'); $updateStmt->execute([$someValue, $userId]); return $user; }
  8. ✅ϝιου಺ͷந৅౓͕ἧ͍ͬͯΔ public function run(int $userId, int $value): User { $conn

    = $this->getConnection(); $user = $this->findUser($conn, $userId); $someValue = $this->caluclateValue($user, $value); $this->updatePoint($conn, $user, $someValue); return $user; } ϝιουݺͼग़͠ͷΈͰॲཧϑϩʔΛهड़
  9. ✅ϝιου಺ͷந৅౓͕ἧ͍ͬͯΔ private function getConnection() { // ந৅౓ఈɿDB ΞΫηε } private

    function findUser($conn, int $userId): ?User { // ந৅౓ఈɿDB ΞΫηε } private function updatePoint($conn, $user) { // ந৅౓ఈɿDB ΞΫηε } private function caluclateValue($user, int $value) { // ந৅౓ߴɿϏδωεϩδοΫ }