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

Bear.SundayとRMパターン

 Bear.SundayとRMパターン

Bear.SundayでなにをResourceにして、なにをResourceにしないのか

またResource以外をどういう構成,設計で実装するべきなのかということをよく悩んでいました

そこで "そこそこよさそうなパターン" としてRMパターンを共有します!

加えて
バリデーションやAPIドキュメントについてもお話します!

hiroki.saito

August 26, 2018
Tweet

More Decks by hiroki.saito

Other Decks in Technology

Transcript

  1. Bear.Sunday

    RMパターン

    View Slide

  2. View Slide

  3. アジェンダ
    - 設計:RMパターン
    - バリデーション
    - APIドキュメント

    View Slide

  4. 設計:RMパターン

    View Slide

  5. RMパターン
    Resource
    Model
    Resource
    リクエストとレスポンスの管理のみ
    バリデーションやModelの結果によるス
    テータスコード調整
    Model
    処理全般

    View Slide

  6. Modelって…?

    View Slide

  7. Model
    Repository
    データ取得関連
    Resource <-> Repository <-> DataSource というレイヤー構造
    Injector
    traitでのセッターインジェクション

    View Slide

  8. Model
    Manager
    その他という感じに…
    あまり考えずにつけてしまいがちだが、いい名前ではない
    直下
    Sundayの拡張など
    Sundayの構成と同様なレイヤー構造をつくるのもあり

    View Slide

  9. なぜこういう構成にしたのか

    View Slide

  10. 全てをResourceにするのは難しい

    View Slide

  11. それぞれResourceとして定義できますか?
    トークのデータを取得する
    ファイルをアップロードする
    音声ファイルを解析する

    View Slide

  12. 余談
    app://
    page://
    当時はデフォルトで設定されている、
    上記以外にResourceを呼び出す拡張方法がわからなかった………

    View Slide

  13. メリット
    役割分担が明確で整理,理解しやすい
    -> 開発速度向上
    もしフレームワークを移行してもModel部分は流用可能

    View Slide

  14. デメリット
    ちょっとMode部分が冗長
    特にRepositoryが冗長になりやすい
    Model配下にResourceの機能が使えない

    View Slide

  15. 改善点
    Modelの返り値はオブジェクトにするべきだった
    配列も悪くないが、
    オブジェクトにすることでの型指定が安心できる

    View Slide

  16. バリデーション

    View Slide

  17. バリデーション
    必要だが、冗長になりやすい
    結構な手間がかかる
    上手に書かないと、可読率が下がる(気がする)

    View Slide

  18. Json-Schemaによるバリデーション
    Json-Schemaファイル + AOP で完全に”外”に出せる
    -> 超Happy!
    ただし
    あるIDのResourceがユニークであるか,
    AとBのどちらが必要,両方nullはNGといったことはできない

    View Slide

  19. APIドキュメント

    View Slide

  20. APIドキュメント
    Swaggerなどは便利だが、
    ドキュメントと実際のコードの整合性を保ち続けるのは大変
    Json-Schemaでのバリデーション制約 + BEAR.ApiDoc
    この2つでいい感じに解決!

    View Slide

  21. BEAR.ApiDoc
    PHPDocとJson-Shcemaを使って
    APIドキュメントを自動生成してくれる
    コードを追従することになるので、
    引数やバリデーション制約が反映され続ける
    http://bearsunday.github.io/manuals/1.0/ja/hypermedia-api.html

    View Slide

  22. デモ:APIドキュメント

    View Slide

  23. まとめ

    View Slide

  24. 番外編 Xdebug

    View Slide

  25. 番外編 Deploy

    View Slide

  26. 番外編 Postman

    View Slide

  27. 番外編 Cacheは難しい

    View Slide