存储库模式和服务层

Repository pattern and service layer

似乎存储库模式负责 CRUD 操作和数据访问方法(例如:存储过程),而服务层正在利用存储库的方法来执行其工作。

我的问题是,我能否将方法放在不使用其存储库方法的服务层中?

例如,如果我的存储库有这些方法,

public interface IRepository<T>
{        
    void Add(T entity);
    void Update(T entity);
    void Delete(T entity);
}

并在 IStudentService class

public interface IStudentService
{
    void AddNewStudent(Student student);
    void UpdateStudent(Student student);
    void DeleteStudent(Student student);

    ExcelImportVM GetStudentExcelExport(List<Students> list);
    List<SelectListItem> GetDateRange();
}

和 StudentService class 实施:

public class StudentService : IStudentService
    {
        private IStudentRepository _repository;    

        public ShopLevelDashService(IStudentRepository repository)
        {
            _repository= repository;          
        }

        public void AddNewStudent(Student student) 
        {
            return _repository.Add(student);
        }

        // ..UpdateStudent & DeleteStudent methods

        public List<SelectListItem> GetDateRange()
        {
           var dateRange = new List<ColumnValuesVM>()
           {
              new ColumnValuesVM { Id = 1, Value = "test" },
              new ColumnValuesVM { Id = 2, Value = "test2" }
           };

           var selectList = new List<SelectListItem>();

           // ..foreach

           return selectList;
       }

       ExcelImportVM GetStudentExcelExport(List<Students> list) 
       {
           // ..codes

           return viewModel;
       }
    }

StudentExcelExport()GetDateRange() 之类的方法放在服务 class 中是否有意义,它不使用其存储库中的方法? (可能例如:_repository.GetDateRange()

还是放在控制器里比较好?

正如@Chetan 所指出的,服务层是您的数据访问层 (DAL)。因此,在您的服务中使用 StudentExcelExport()GetDateRange() 并不是最佳做法。服务层应该只有处理数据库操作的方法。

由于您的 both 方法只是准备视图组件,因此应该在控制器级别。对于其他复杂逻辑,您可以使用业务逻辑层而不是与 DAL 混合使用。

Or is it better to put them in the controller?

答案是将它们放在控制器中。

希望对您有所帮助!