Skip to content

リポジトリ設計の見直し: ドメインロジックの適切な配置と集約境界の明確化 #198

@KinjiKawaguchi

Description

@KinjiKawaguchi
  1. ドメインロジックがリポジトリに漏れている
    GetScoresメソッドでは「キーストローク数が120以上、正確性が0.95以上」というドメインルールがリポジトリに実装されています。
    リポジトリはデータの永続化と取得に責任を持つべきで、ドメインルールはドメインサービスやエンティティに実装されるべきです。

  2. リポジトリインターフェースの抽象度が低い
    CreateScoreメソッドがisMaxKeystrokesやisMaxAccuracyのようなフラグを受け取り、内部で以前の最大スコアの更新も行っています。
    リポジトリは集約単位で操作を提供し、単純なCRUD操作に集中すべきです。

  3. 集約の境界が不明確
    ScoreとUserの関係が明確に定義されていません。ScoreモデルがUserを含んでいますが、これが集約の一部なのか、単なる参照なのかが不明確です。
    集約の境界は明確に定義され、集約ルートを通じてのみアクセスされるべきです。

  4. リポジトリメソッドの責務が大きすぎる
    GetMaxScoresメソッドは2つの異なる最大スコア(キーストロークと正確性)を同時に取得しています。
    2つの別々のメソッド(GetMaxKeystrokesScoreとGetMaxAccuracyScore)に分割すべきです。

  5. インフラストラクチャの詳細がドメインに漏れている
    リポジトリインターフェースがuuid.UUIDのような特定の実装詳細に依存しています。
    ドメイン固有の型を使用するか、基本型(string)を使用すべきです。

  6. 集約ルートとしてのScoreの扱いが不適切
    Scoreモデルが集約ルートとして扱われていますが、その役割が明確に設計されていません。
    集約ルートはその集約内のすべてのエンティティのライフサイクルを管理すべきです。
    Scoreを適切な集約ルートとして再設計し、そのライフサイクル管理責任を明確にすべきです。

  7. ドメインモデルとデータモデルの変換が複雑
    リポジトリ実装内でエンティティフレームワークのモデルからドメインモデルへの変換が複雑に行われています。
    インフラストラクチャレイヤーはドメインモデルとデータモデルの間の変換を担当しますが、この変換はシンプルであるべきです。
    マッパーパターンを導入するか、変換ロジックを整理して簡素化すべきです。

Metadata

Metadata

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions