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

フレームワークとの付き合い方 / how-to-use-framework

shin1x1
February 16, 2019

フレームワークとの付き合い方 / how-to-use-framework

2019/02/16 Laravel JP Conference

shin1x1

February 16, 2019
Tweet

More Decks by shin1x1

Other Decks in Technology

Transcript

  1. フレームワークは How である What = アプリケーションとして実装すべきもの ドメイン、関心事、仕様 How = What

    をどの技術でどう実装するか HTTP 、RDBMS 、メール、KVS 等 アプリケーションが主、フレームワークは従 9
  2. [ 例1] SQL を書くか問題 複雑なクエリを Eloquent や QueryBuilder で書くのが大変 SQL

    を書いて、それを Eloquent のコードに書き戻す不毛感 必要なら SQL 文を書く selectRaw() 、whereRaw() 、DB::statement() 等 Eloquent のメソッドに閉じて、局所化しておく 11
  3. [ 例1] SQL 文を記述 Eloquent のメソッドに実装 呼び出す側は、SQL 文が書かれているかは知らなくて良い public function

    findTargetOrders(array $itemIds): iterable { $sql = <<<EOT SELECT * FROM orders WHERE (SELECT COUNT(*) FROM order_details WHERE orders.id=order_details.order_id AND order_details.item_id=? AND COUNT(*)>?) EOT; return $this->newQuery()->selectRaw($sql, $itemIds)->get(); } 12
  4. [ 例2] 1 API だけを速度改善 フレームワーク上で動く Web アプリケーション キャンペーンで、1 API

    のみアクセスが急増する オンプレミス環境で、スケールアウトが容易ではない チューニングは行ったが、フレームワークのボトルネック 13
  5. [ 例2] API を Plain PHP で再実装 フレームワークのボトルネックが解消されたのでアクセスを捌けた 他の API

    や機能はフレームワークを利用したまま 基本はフレームワーク実装、事情があれば外す 14
  6. [ 例3] 独自 namespace composer.json に設定 ルーティングで独自 namespace を見るように設定 app/Providers/RouteServiceProvider.php

    //protected $namespace = 'App\Http\Controllers'; protected $namespace = ''; // 空文字にする routes/(api|web).php use App\Http\Actions\AddPoint\AddPointAction; $router->put('/customers/add_point', AddPointAction::class); 22
  7. 事例: Laravel アップグレード Laravel 4.2 + PHP 5.6 から Laravel

    5.5 + PHP 7.2 業務アプリケーション(SPA ) 入力フォーム、集計、帳票 独自ディレクトリ構成 サービスレイヤを追加し、アプリケーションロジックを実装 サービスレイヤは、Eloquent と密結合 28