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

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

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

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

Avatar for TAKAHASHI Osamu

TAKAHASHI Osamu

April 14, 2020

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