# phpcon tokyo 2019 --- # MVCとはなにか ## はじめに - MVC as Observerでのモデル : 状態を与える、状態をウォッチ - fluxっぽさあるs ## ドメインモデル - 複写式伝票(飲食とかで使われる伝票)の処理フロー - 厨房の人とホールの人に取って処理したい部分が違う - 厨房 : 料理する順のみ - ホール : 出したかどうか(true/false) - 注文伝票と券売機の差 - キャンセル方法が違う - 注文 : そのまま続行 - 券売 : 別のシステムが必要 - 問題領域(ドメイン) : ビジネス/目的 - 顧客が食べたいものを出す(目的)など - 解決領域(ドメインモデル) : 手段 - メモおいつかない - 国家とか(紛争解決をどのように効率化するか) - ドメインモデル : 社会的なシステム(業務の形を作ったり)で個人の制約になる ## メンタルモデル - 行動のイメージを表現したもの(左右に動かすならそれをするためのレバーも左右に動かすみたいな) - ユーザーイリュージョン - ユーザーがドメインの情報を直接操作出来るようにする(後述) - メンタルモデル構築のためには必要 - 例 : スプレッドシートとか ## パーソナルコンピュータ - システム(社会)と個人の関係を変えようとした - プログラミング言語の表現が人からかけ離れてはいけない - ユーザーが理解可能な言語を作るべき ## MVCとはなにか - MVC自体が3DCGのカメラとワールドの関係に似てる - 情報システム(ドメイン)から個人が(パーソナルコンピュータで)メンタルモデルを構築する - 色々構築であったりデザインしずらいと思って個人が色々ツールを導入する - そういうツールの一種がMVC? --- # 「グランブルーファンタジー」開発エンジニアの考え方 ## はじめに - グラブル : LAMP環境 - webゲームなので操作ごとに通信がサーバーに飛ぶ - ユーザー多いので結構負荷が結構かかる - ラピュタ放映時のツイッターの2倍の負荷が最大秒間かかるらしい ## 大切にしていること - 計測と改善 ## 改善活動の例 ### phpバージョン5.6 -> 7.2にした話 - 7.2対応 - 2018年年明けには完了 - 静的解析・それで見つかったエラー対応 - フレームワークバージョンアップ(FuelPHPらしい) - 効果 - 平均レスポンスタイムが半分に - メモリ使用量・CPU使用量も半分 - フレームワークというよりはゲームロジック自体の処理が速くなった(後述) - なぜ速くなったか - 処理が大きく改善した関数において - 配列の生成・アクセス、特にメモリブロック上の(連想配列が不要なやつ)としての配列 - グラブルのルールのために大量のパラメータを配列で管理している、なので配列操作もおおい - 7.2でメモリブロック配列付近が改善されたので速くなった - apache workerの追加 - というか高速化のためにworkerめっちゃ消費したので増やした的な - 新たなボトルネック - 瞬間的なリクエストがDBに - 負荷分散で鎮火 --- # WAFの過去・現在・未来(クラウドのセキュリティの前座) - WAF(web application firewall) - 商用wafはホワイトリスト方式 - 自分で設定するので漏れ出すと終わる - 第一世代 : ブラックリスト時代 - sqlのWHEREとか検知して弾く - クソ - 第二世代 : 誤入力と攻撃の見分けができない - 変な文字列入れたらやばいalertが - 第三世代 : よくわからん - 現在 : 再びブラックリストらしい - コンテナ型のWAF # 本題 ## WAF - ファイアウォールと重ねがけする ## 今までのWAF - アプライアンス型 - SaaS型 - ホスト型 ## docker型のWAF --- # Laravel * Clean Architecture - 実装例の話 - clean architecture自体は疎結合にするとこしようねみたいな話 ## 具体的な実装方法 - adapterとdomainに分離 - domain : ビジネスロジックの表現のために諸々独自にやってるぽい - UseCaseInput : ドメイン層におけるUseCaseの入力 - UseCaseOut : ドメイン層におけるUseCaseの返り値 - 教科書的な実装ではUseCase自体は返り値void - Adapter : データストアをドメインに、ドメインをデータストアにするMapper - あとはスライドみましょう ## 開発中の現場のinside ## 所感 むずかった わかんね
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up