存储库模式和服务层
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?
答案是将它们放在控制器中。
希望对您有所帮助!
似乎存储库模式负责 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?
答案是将它们放在控制器中。
希望对您有所帮助!