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

失敗から学ぶGoプロジェクト~Template Repository~

失敗から学ぶGoプロジェクト~Template Repository~

Genki Hirano

April 15, 2024
Tweet

More Decks by Genki Hirano

Other Decks in Programming

Transcript

  1. 自己紹介 - 名前 - 平野 元気 - どんなエンジニア? - バックエンドを担当しています

    - Go言語を書くことが多いです - 設計も好きです - 一言 - ざっくばらんにお話ししましょう!
  2. プロジェクトの前提 - Go言語 - クリーンアーキテクチャ - DDD - バックエンドメンバーが計13人、2チーム -

    仕様が固まっていない&短納期でなし崩し的に開発がスタートしてしまった
  3. 問題点 - ロジックの重複が起こる - 同じロジックがユースケースやコントローラーに散らばる - 仕様変更の際に、修正漏れが発生する可能性が上がる - テストが複雑になる -

    ビジネスロジックがユースケースに漏れた場合、ビジネスロジックのユニットテストが辛くなる - ユースケースはインテグレーションテストで書くため - 可読性の低下 - 各ドメインのビジネスロジックが把握しにくくなる
  4. 対応策 - ビジネスロジックをドメインレイヤーに閉じ込める - ドメインモデルの各フィールドはプライベートにする - 各フィールドを参照する際は getterメソッド、値を更新する時は setterメソッドを使用する -

    注意点として、setterメソッドは脳死で全フィールドに生やさず、ビジネスロジックを表現するため実装する - setterメソッドを全フィールドに実装すると、実質パブリックと変わらなくなってしまう ...
  5. 対応策 - 汎用的な値オブジェクトを初期に定義して、各ドメインモデルで使い回す - 名前 (苗字、名前、苗字カナ、名前カナ ) - メールアドレス -

    住所 - 電話番号 - 生年月日 (年齢) - バリデーション、コンストラクタ、 getter、setter、testを実装しておく