0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

dto設計要否の線引き

Posted at

以下のフローとチェックリストを使うと、
「DTO のフィールドを先に決めて詳細設計に落とし込むか/実装しながら都度追加するか」を 10 分で判定できます。


1. まず “計測可能な 5 指標” を埋める

指標 目安 記入例
① 予想 DTO 数 1 ~ 5 / 6 ~ 15 / 16+ 8
② 1 DTO あたりの平均フィールド数 1 ~ 4 / 5 ~ 10 / 11+ 6
③ 外部公開レベル A: 同一モジュールのみ
B: 他チームも利用
C: 外部システム(API) へ公開
B
④ 要件変更頻度(開発中) Low: 月1 未満
Mid: 週1 程度
High: 毎日
Mid
⑤ チーム規模 1 ~ 3 / 4 ~ 7 / 8+ 4

2. スコアリングして判断

  1. 各項目に下記ポイントを付与
    • ①②⑤:小→0 pt、中→1 pt、大→2 pt
    • ③:A→0 pt、B→1 pt、C→2 pt
    • ④:Low→0 pt、Mid→1 pt、High→2 pt
  2. 合計 ≤ 4 pt なら “直接実装で OK”
    • 例)単独開発・内部利用・小規模 DTO
  3. 合計 5 ~ 7 pt なら “軽量設計”
    • ざっくりクラス図/フィールド一覧だけ先に作る(30 分上限)
  4. 合計 8 pt 以上 なら “フル設計必須”
    • 詳細設計レビュー → POJO 生成 → 自動テスト雛形まで用意

経験則
DTO 1 クラスの「後から追加・リネーム」コストは平均 15 〜 20 分(影響調査+コンパイルエラー修正)。
逆に「最初にフィールドを洗い出す」コストは 5 〜 10 分。
追加修正回数が 2 回を超える見込みなら、もう先に設計したほうが早い。


3. 迷ったときの補助質問(Yes が多いほど upfront 設計寄り)

  1. この DTO が API 契約書になるか?
  2. 複数チームが同時に触るか?
  3. フィールドの型が複雑(List<Nested> 等)か?
  4. 将来バージョニングが必要か?
  5. リリース後に “互換性を壊せない” 制約があるか?

Yes が 3 つ以上 → 設計してから実装。


4. 実際の進め方サンプル

合計 3 pt(直接実装で OK)

  • 状況:2 人チーム/内部ツール/DTO 3 クラス × 平均 3 フィールド
  • 手順:IDE の generate 機能で POJO をその場で作り、プルリクで名前だけ軽く確認。

合計 6 pt(軽量設計)

  • 状況:5 人チーム/社内共通ライブラリ/DTO 8 クラス × 平均 7 フィールド
  • 手順
    1. Miro で簡易クラス図(20 分)
    2. フィールド名だけ合意→自動コード生成
    3. 実装フェーズで getter/setter・validation 追加

合計 9 pt(フル設計)

  • 状況:外部公開 REST API/DTO 20+/マイクロサービス間連携
  • 手順
    1. OpenAPI/Swagger でスキーマ定義
    2. PR レビュー+契約テスト用ワイヤモック整備
    3. Codegen で DTO クラス生成 → 以降は原則ノータッチ

5. まとめ ― “明確な線引き” は 合計 4 pt

  • 0 〜 4 pt:設計せず実装着手、後で微調整したほうが速い
  • 5 〜 7 pt:30 分以内の軽量設計で手戻り最低限
  • 8 pt+:最初にしっかり設計し、契約を固めるほうが総工数が小さい

この基準を定例ミーティングの冒頭で 5 分で確認し、毎スプリント使い回すと判断がブレません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?