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

Scala未経験のチームと共にScalaで新機能をリリースするまで

 Scala未経験のチームと共にScalaで新機能をリリースするまで

TAKAHASHI Osamu

April 14, 2020
Tweet

Other Decks in Programming

Transcript

  1. ⾃⼰紹介 TAKAHASHI Osamu twitter: @zerosum_ フリュー株式会社 ピクトリンク事業部 開発部 システム再構築PJ ソフトウェアエンジニア

    サーバサイドアプリケーション Java 2 年 > Scala 4 年 > Java 2 年 > 最近はちょいちょいScala 4
  2. アーキテクチャ決定 Clean Archetecture の考え⽅を採⽤ ⽅針と詳細 ビルドレベルで依存の⽅向を制約した sbt is good //

    ↓ いわゆるutilities だが, ここが膨れるとヤバいので薄く保っている lazy val base = project in file("modules/base") // ↓ いわゆるビジネスロジック lazy val domain = (project in file("modules/domain")).dependsOn(base) // ↓JDBC やhttp client などへの依存はここ lazy val interface = (project in file("modules/interface")).dependsOn(base, domain) // ↓ アプリケーション全体の結合. フレームワークとかへの依存はここ lazy val api = (project in file("api")).dependsOn(base, domain, interface) 14
  3. アーキテクチャ決定 ⾔葉(⽅針)を決める entity : 識別⼦とライフサイクルを持ってるやつ repository : entity のライフサイクルに関する振る舞い usecase

    : ユースケース単位で⾒たアプリケーションの振る舞い DDD とCrean Archetecture の⽤語が混じっているが、実装時に「この 振る舞いはどういう性質( repository 的、 usecase 的)だろうか」と 考えれば、どこで実装するべきか迷わなくなることを重視。 ( もちろん最初からきっちり分かれてたわけではなかった) 16
  4. 議論 〜 実装 合意が取れた時点で仮のシグネチャとscaladoc を書く 可能ならこの時点でユニットテストのテストケースだけ列挙する Nothing is good /**

    [ 客] が[ 商品] を購⼊する. * - [ 残⾼] が⾜りない場合は「残⾼不⾜」として失敗する * - 購⼊に成功したら[ 購⼊履歴] を記録し, [ 残⾼] を[ 商品] 価格の合計だけ減らし, [ レシート] を発⾏する * * @param items 購⼊する[ 商品] のリスト * @param balance 購⼊時に[ 客] が持っている残⾼ * @return 購⼊に成功した場合は`Receipt` を返却する. * 残⾦不⾜で購⼊に失敗した場合は`Error.BalanceShotage` を返却する */ def purchace(items: Seq[Item], balance: Int): Either[Error, Receipt] = ??? 20