2. 為什么需要 Repository 模式


3. Repository 模式的兩種闡釋

3.1 正式定義(學術視角)

> Repository 模式旨在為領域與數據映射層之間提供中介,使業務邏輯層無需關注數據存儲細節,就像一個“數據庫集合”的接口。

3.2 通俗解釋(實戰視角)

倉儲就是一個專門存放“數據庫調用”的地方,你把 DbContext 的增刪改查都放在這里,需要時在業務或控制器中“即插即用”,就像隨時取用一個獨立模塊。


4. 在 ASP.NET Core 中實現 Repository 模式

4.1 定義模型(Pokemon)

public class Pokemon
{
    public int Id { get; set; }
    public string Name { get; set; }
    // … 其他屬性
}

4.2 創建接口(IPokemonRepository)

Interfaces/IPokemonRepository.cs 中定義倉儲契約:

public interface IPokemonRepository
{
    IReadOnlyCollection < Pokemon > GetPokemons();
    // 若有增刪改查,可繼續擴展:
    // Pokemon GetPokemon(int id);
    // bool CreatePokemon(Pokemon p);
    // bool UpdatePokemon(Pokemon p);
    // bool DeletePokemon(int id);
}

4.3 編寫倉儲類(PokemonRepository)


Repositories/PokemonRepository.cs 中實現接口:

public class PokemonRepository : IPokemonRepository
{
    private readonly AppDbContext _context;

    public PokemonRepository(AppDbContext context)
    {
        _context = context;
    }

    public IReadOnlyCollection < Pokemon > GetPokemons()
    {
        // 從 DbContext 中讀取所有 Pokemons,并按 Id 排序
        return _context.Pokemons
                       .OrderBy(p = > p.Id)
                       .ToList();
    }
}

> 要點ToList() 明確觸發查詢,并轉換為不可變集合類型。


4.4 在 Controller 中調用倉儲方法

Controllers/PokemonController.cs 中注入并使用:

[ApiController]
[Route("api/[controller]")]
public class PokemonController : ControllerBase
{
    private readonly IPokemonRepository _pokemonRepo;

    public PokemonController(IPokemonRepository pokemonRepo)
    {
        _pokemonRepo = pokemonRepo;
    }

    [HttpGet]
    public ActionResult < IReadOnlyCollection < Pokemon > > GetPokemons()
    {
        if (!ModelState.IsValid)
            return BadRequest(ModelState);

        var list = _pokemonRepo.GetPokemons();
        return Ok(list);
    }
}

4.5 配置依賴注入

Program.cs 中注冊服務:

builder.Services.AddScoped < IPokemonRepository, PokemonRepository > ();

5. 小結與最佳實踐

通過本文示例,你已掌握在 ASP.NET Core 項目中從零搭建 Repository 模式的全流程,讓你的 API 更加松耦合、易維護、可測試。繼續打磨、優化,項目將更具健壯性與可擴展性!

原文引自YouTube視頻:https://www.youtube.com/watch?v=-LAeEQSfOQk

上一篇:

ASP.NET Core API POST 創建詳解|DTO、AutoMapper 與 EF Core 實戰

下一篇:

使用NestJS和Prisma構建REST API:身份驗證
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費