Goでのモデル 取扱説明書 / Golang How To Deal With Models

Goでのモデル 取扱説明書 / Golang How To Deal With Models

アプリケーションにおく各レイヤでのモデルや定数などの構造体をうまく扱う方法を考えてみます。

5235374fd2460f4cbdb69f093563c9f1?s=128

Yukichi Tamura

December 18, 2018
Tweet

Transcript

  1. Copyright©HRBrain, Inc. All Rights Reserved golang.tokyo#20 LT⼤会 Goでのモデル 取扱説明書

  2. Copyright©HRBrain, Inc. All Rights Reserved ⾃⼰紹介 Tamura Yukichi CyberAgent, Inc

    2014 〜 HRBrain, Inc 2018/8 〜 サーバーサイド。 たまにReact。 趣味でVue (Nuxt) 。 Twitter, Github: uqichi
  3. Copyright©HRBrain, Inc. All Rights Reserved HRBrainとは 煩雑で不透明になりがちだった⽬標・評価管理のプロセスを ⼀気通貫で効率化・⾒える化するクラウド型ソフトウェア 「⼈事評価を最もカンタン・シンプルに」

  4. アプリケーションのレイヤー間
 で登場する構造体たち

  5. Copyright©HRBrain, Inc. All Rights Reserved データ(構造体)定義の例 UseCase Repository Handler .PEFM

    &OUJUZ 3FRVFTU 3FTQPOTF DB Table JSON JSON JSON Web APIを例 *OQVU 0VUQVU
  6. Copyright©HRBrain, Inc. All Rights Reserved Data Transfer Object Entity

  7. Copyright©HRBrain, Inc. All Rights Reserved Data Transfer Object Domain Model

  8. Copyright©HRBrain, Inc. All Rights Reserved Data Transfer Object Response (Output)

  9. Copyright©HRBrain, Inc. All Rights Reserved Data Transfer Object Request (Input)

  10. Copyright©HRBrain, Inc. All Rights Reserved データ(構造体)定義の例 UseCase Repository Handler .PEFM

    &OUJUZ DB Table JSON JSON JSON Web APIを例 3FRVFTU 3FTQPOTF *OQVU 0VUQVU
  11. どうやって変換する?

  12. Copyright©HRBrain, Inc. All Rights Reserved 構造体の変換 golang.org/pkg/encoding

  13. Copyright©HRBrain, Inc. All Rights Reserved 構造体の変換 golang.org/pkg/encoding/gob Package gob manages

    streams of gobs - binary values exchanged between an Encoder (transmitter) and a Decoder (receiver). A typical use is transporting arguments and results of remote procedure calls (RPCs) such as those provided by package "net/ rpc". The implementation compiles a custom codec for each data type in the stream and is most efficient when a single Encoder is used to transmit a stream of values, amortizing the cost of compilation.
  14. Copyright©HRBrain, Inc. All Rights Reserved golang.org/pkg/encoding/gob 構造体の変換

  15. Copyright©HRBrain, Inc. All Rights Reserved godoc.org/github.com/golang/protobuf/proto 構造体の変換

  16. Copyright©HRBrain, Inc. All Rights Reserved Marshaler, Unmarshalerを実装して変換結果をカスタマイズする

  17. Copyright©HRBrain, Inc. All Rights Reserved おまけ:Marshaler, Unmarshalerの活⽤ 空の構造体はnullを返すようにする

  18. Copyright©HRBrain, Inc. All Rights Reserved • type aliasで定義する • 定数をキーに⽂字列値のマップを定義する

    • jsonのencoder/decoderを通さなくても変 換できるようにメソッドは分けておく おまけ:Marshaler, Unmarshalerの活⽤ アプリケーション定数
 バックエンドは数値、クライアントは⽂字 列で定数を扱えるようにする
  19. 全レイヤー、モデルで解決したい

  20. Copyright©HRBrain, Inc. All Rights Reserved データ(構造体)定義の例 UseCase Repository Handler .PEFM

    &OUJUZ DB Table JSON JSON JSON Web APIを例 3FRVFTU 3FTQPOTF *OQVU 0VUQVU
  21. Copyright©HRBrain, Inc. All Rights Reserved データ(構造体)定義の例 UseCase Repository Handler .PEFM

    DB Table JSON JSON JSON Web APIを例 3FRVFTU *OQVU
  22. Copyright©HRBrain, Inc. All Rights Reserved All in Model Rails Active

    Record Active Recordとは、MVCで⾔うところのM、つまりモデルに相当するものであ り、ビジネスデータとビジネスロジックを表すシステムの階層です。Active Recordは、データベースに恒久的に保存される必要のあるビジネスオブジェク トの作成と利⽤を円滑に⾏なえるようにします。Active Recordは、ORM (オブ ジェクトリレーショナルマッピング) システムに記述されている「Active Record パターン」を実装したものであり、同じ名前が付けられています。
  23. ぴったりの ORM があります

  24. Copyright©HRBrain, Inc. All Rights Reserved Active Record に影響を受けて作られたGo製ORM github.com/gobuffalo/pop A

    Tasty Treat For All Your Database Needs
  25. Copyright©HRBrain, Inc. All Rights Reserved Active Record に影響を受けて作られたGo製ORM • PostgreSQL

    (>= 9.3) • CockroachDB (>= 1.1.1) • MySQL (>= 5.7) • SQLite3 (>= 3.x) github.com/gobuffalo/pop
  26. Copyright©HRBrain, Inc. All Rights Reserved DEMO https://github.com/uqichi/goffee-server

  27. Copyright©HRBrain, Inc. All Rights Reserved • Active Recordスキーマにおける名前付けルール • データベースのマイグレーション

    • 検証(validation) • コールバック • Associationが強⼒ • クライアントツール付属(SODA) gobuffalo/pop
  28. Copyright©HRBrain, Inc. All Rights Reserved gobuffalo/pop Association

  29. Copyright©HRBrain, Inc. All Rights Reserved gobuffalo/pop Association • Eager(fields string)

    • Load(fields string)
  30. Copyright©HRBrain, Inc. All Rights Reserved gobuffalo/pop Association • Eager(fields string)

    • Load(fields string)
  31. Copyright©HRBrain, Inc. All Rights Reserved soda CLI create Creates databases

    for you drop Drops databases for you fix Brings pop, soda, and fizz files in line with the latest APIs generate Generates config, model, and migrations files. migrate Runs migrations against your database. reset Drop, then recreate databases schema Tools for working with your database schema gobuffalo/pop/soda
  32. Copyright©HRBrain, Inc. All Rights Reserved gobuffalo/pop/soda uuid validate callback soda

    generate model coffee
  33. 終了