Save 37% off PRO during our Black Friday Sale! »

GoとMicroserviceでDDDやってみました

 GoとMicroserviceでDDDやってみました

7afd74181738991f61d6061562ff419d?s=128

hitsuji-haneta

April 20, 2020
Tweet

Transcript

  1. やってみました Go MicroService DDD で と 2020/04/20 DDD Talk Meetup

    Online
  2. 高橋翔太 hitsuji-haneta LasTrust株式会社 h1tsuj1_haneta https://lastrust.io ・ブロックチェーン証明書の発行 ・証明書の管理アプリの開発 (ヒツジハネタ) ࣗݾ঺հ

  3. 教育機関・金融機関・自治体など ࣗݾ঺հ 個人の見えざる価値を可視化する

  4. Go Sendai 2020/7/4 Conference

  5. Go言語+MicroServicesで構築していた 弊社サービスにDDDを導入してみました ・DDDを導入しようとしたきっかけ ・マイクロサービスから見たDDD ・Go言語から見たDDD(アーキテクチャ) ・所感

  6. DDDは初心者です よくない設計もあるかも知れないので お気づきの方は懇親会で教えて下さい

  7. Service A Service C Service B %%%ಋೖͷ͖͔͚ͬɹ サービスの数が増えてきた ◦◦を元にした設計 ✕✕な感じの設計

    Service D Service E △△風な設計 つらい…
  8. %%%ಋೖͷ͖͔͚ͬɹ → ちゃんとドキュメントを残せばいい? → 最小限にしたい → チームとして共通の設計認識を持って   それを規律としていきたい 個々のサービスの設計思想がバラバラ&追えない

    DDDはどうだろう??
  9. Go言語 マイクロサービス

  10. Go言語 マイクロサービス

  11. ϚΠΫϩαʔϏε͔Βݟͨ%%%ɹ Service A Service C Service B DDDを元にした設計 DDDを元にした設計 Service

    D Service E DDDを元にした設計 見やすい! レビューしやすい!
  12. ϚΠΫϩαʔϏε͔Βݟͨ%%%ɹ Service A Service C Service B Service D Service

    E 予期していなかった効果 → 境界づけられたコンテキスト 実はマージした方が いいのでは?
  13. ϚΠΫϩαʔϏε͔Βݟͨ%%%ɹ それまで 「責務の分離」に応じてサービスを区切っていた DDD導入後 BUT 意外にそこの解釈は人による… 基準ができた!

  14. Go言語 マイクロサービス

  15. (Pݴޠ͔Βݟͨ%%%ɹ Go言語の特徴 ・実行速度が速い ・並列処理が簡単 ・シンプルな言語構造 Class構文がない Interfaceはある でも継承はない

  16. (Pݴޠ͔Βݟͨ%%%ɹ どういうこと? type dog struct { id uint name string

    } func(d *dog) Cry() string { return “Bow!" } type Animal interface { Cry() string } func test(a Animal) { fmt.Printf(a.Cry()) } メソッドは構造体(struct)に紐付ける Interfaceに定義されたメソッドと 同じものが定義された構造体はそ のInterfaceとして使用できる
  17. (Pݴޠ͔Βݟͨ%%%ɹ Goで有名な考え方 accept interfaces, return structs. 関数はインターフェースを受け入れて 構造体を返すように作りましょう

  18. type someStc struct { id uint name string } type

    SomeIf interface { CreateStc() someStc } func Test(i SomeIf) *someStc { return i.CreateStc } (Pݴޠ͔Βݟͨ%%%ɹ Func Interface ダックタイピングに近い Interfaceは使う人が定義する (同じpackage内とか) Struct
  19. (Pݴޠ͔Βݟͨ%%%ɹ IssueCertificate() Issuerドメイン 証明書を発行して ストレージに格納 S3 GCS ファイル システム Storage

    Adapter S3 Adapter 外から渡す インターフェースは どこで定義する?
  20. (Pݴޠ͔Βݟͨ%%%ɹ Issuerドメイン IssueCertificate() Storage Adapter S3 Adapter Interfaceは使う人が定義 シンプルになった!

  21. まとめ ・マイクロサービスの設計に明確な基準ができた ・「accept interfaces, return structs.」の   考え方を使えば置き場所の悩みがスッキリする 懸念 ・Interfaceの置き方がコレでいのかという

     不安はある。詳しい方の見解聞きたい!
  22. ありがとうございました!