一、最终规范目录
Admin.NET.Domain // 领域层(只放抽象、不依赖任何) ├── Entities/ // 实体:User、Role、UserRole ├── Enums/ // 枚举 └── Repositories/ ← **这里放 IRepository<T>、IUserRepository** ├── IRepository.cs // 泛型仓储接口 └── IUserRepository.cs // 用户仓储接口 Admin.NET.Infrastructure // 基础层(实现仓储) └── Repositories/ ← **这里放所有仓储实现** ├── RepositoryBase.cs // 泛型仓储基类 └── UserRepository.cs // 用户仓储实现 Admin.NET.Application // 应用层 └── Services/ └── UserService.cs // 只依赖 IUserRepository,不依赖 DbContext Admin.NET.API // Web层 └── Controllers/ └── UserController.cs二、一句话结论
- 接口(IRepository)
→ 放在Domain/Repositories/下 - 实现(RepositoryBase、UserRepository)
→ 放在Infrastructure/Repositories/下 - 必须建 Repositories 文件夹,不要直接扔在项目根目录
- 这是国内 .NET 公司最标准、最通用的结构
三、为什么这么放?(面试也能说)
- Domain 只放抽象,不依赖任何项目
IRepository 是领域契约,所以放领域层 - Infrastructure 放具体技术实现
RepositoryBase 是 EF 实现,属于技术细节,放基础层 - 结构清晰,后期换 ORM 只动 Infrastructure,不动 Domain
- 团队协作不会乱