リポジトリパターンは、データソース(データベース、APIなど)へのアクセスロジックをカプセル化し、ドメインロジックとデータストレージメカニズムの間に抽象化の層を提供します。主な目的は、ストレージの実装の詳細を隠し、ドメインオブジェクトのコレクションとの操作を確保することです。
利点:
C#のコード例:
public interface IUserRepository { User GetById(int id); void Add(User user); } public class UserRepository : IUserRepository { private readonly DbContext _context; public UserRepository(DbContext context) { _context = context; } public User GetById(int id) => _context.Users.Find(id); public void Add(User user) => _context.Users.Add(user); }
主な特徴:
リポジトリはデータベースの構造を知っている必要がありますか?
いいえ。リポジトリはドメインオブジェクトを操作し、ストレージの詳細を隠す必要があります。別のデータアクセスレイヤーがデータベーススキーマへのマッピングを担当します。
リポジトリクラス内にビジネスロジックを混在させることはできますか?
いいえ。これは関心の分離を違反します:リポジトリはデータの取得/保存のみに責任を持つべきです。ビジネスロジックはサービス/ドメインオブジェクトに分離する必要があります。
リポジトリとDAOは同じですか?
完全に同じではありません。DAOはリポジトリパターンとは無関係で、テーブルやレコードのレベルで機能しますが、リポジトリはビジネスロジックのオブジェクトと連携します。リポジトリはビジネスエンティティのコレクションを抽象化し、DAOはインフラに近い存在です。