JJUGナイトセミナー「みんなの小噺」に行ってきた #jjug

JJUGナイトセミナー「みんなの小噺」に参加しました。今回はオンライン開催。簡単に所感をまとめます。

jjug.doorkeeper.jp

所感

Retrofit は割と前からあるみたいだけど、初めて知りました。もともとは Android 向けなんだろうか。Type-safe だし、新しいプロトコルにも対応しているようでなかなかよさそう。

今回、初めて JIG のデモを見ましたが、思ってたよりずっといい感じ。設計と実装のサイクルを回すという考えをしっかりサポートしてるように見えました。DDD の勉強でコード書くときに使ってみようかな。

Dapr は、この前の JSUG で聴いた Spring Cloud Consul の話に似てるような気がした...?同じ目的で作られてるものなんだろうか。あと、組み合わせ問題の話があったけど、そのあたりがイマイチ腹落ちしてない...。

[2020/05/02 追記] YouTube の URL

youtu.be

以下、メモから抜粋。

JavaでHTTP接続してみよう

  • JSON は js のオブジェクトをデータ記述に流用したもの
  • 標準 API
  • java.net.Socket
    • TCP 接続
    • バークレイソケットをラップ
  • HTTP プロトコル
  • java.net.URLConnection
    • HTTP で使うときは HttpURLConnection にダウンキャストが必要
    • 主にドキュメント取得で使う (POST パラメータ送信は面倒)
    • 同期処理のみ
  • java.net.http.HttpClient
    • HttpResponse.BodyHandler でレスポンスのハンドラ
    • BodyHandlers#ofLines でレスポンスを Stream で返せる
    • HTTP2 に対応
    • 非同期でモダンな API
  • Retrofit
    • Type-safe HTTP Client
    • interface のメソッドにマッピングする
    • 内部では OkHttp で HTTP 接続する
    • リクエストのオブジェクトは Call<T> でラップする
    • HTTPS, WebSocket, WebRTC, HTTP2, HTTP3
  • フレームワークで用意されているものがあればそっちを使うのがよさそう

RDRA2.0のサンプルをJIGを利用して実装してみたよ

www.youtube.com

  • system-sekkei/library
  • RDRA
  • JIG
  • ドメインモデルの実装
    • バリエーションダイアグラム
      • ビジネスに登場する値/区分(条件)
    • 状態モデル
      • ビジネスに登場する状態/状態遷移
    • 情報モデル
      • ビジネスに登場する情報とそれらの関連を表す
      • パッケージ構成
  • アプリケーション層の実装
  • JIG ドキュメント
    • パッケージの依存関係 (深さはファイル名の -depthN で見れる?)
    • ビジネスルールの関連 (クラスの関連)
    • クラス間の相互依存が見つけやすい
    • 各層の呼び出し関係が分かりやすい
      • Controller ⇒ Coordinator
      • Coordinator ⇒ Service
      • Service ⇒ Repository
      • 画面 ⇒ ユースケース
  • RDRA ⇔ JIG で図を比較しながら実装する
    • サイクルを回す

なぜ僕がDaprを使おうとしているのかという話

  • 分散アプリケーションランタイム
    • アプリとインフラの間に置く (プロキシ?)
    • マイクロサービスのビルディングブロック?を提供
    • マイクロサービス開発の機能群を抽象化する
    • サイドカーとして提供
      • アプリ ⇔ Dapr API は HTTP/gRPC
  • Dapr のコンテナ上でアプリが動くわけではない
  • サービス呼び出しやデータストア保存は Dapr のプロセス経由
  • サービスディスカバリは Dapr が担う
  • Spring Boot / Spring Cloud でも実現可
  • Dapr
  • バージョンアップ
  • Java と Dapr のバージョンアップを別にできる
  • Spring のようにフルスタックではない
    • 組み合わせ問題が起きるかも?
  • https://github.com/cero-t/dapr-trial