【发布时间】:2017-09-19 01:33:25
【问题描述】:
似乎存储库模式负责 CRUD 操作和数据访问方法(例如:存储过程),而服务层正在利用存储库的方法来执行其工作。
我的问题是,我能否将方法放在不使用其存储库方法的服务层中?
例如,如果我的仓库有这些方法,
public interface IRepository<T>
{
void Add(T entity);
void Update(T entity);
void Delete(T entity);
}
在 IStudentService 类中
public interface IStudentService
{
void AddNewStudent(Student student);
void UpdateStudent(Student student);
void DeleteStudent(Student student);
ExcelImportVM GetStudentExcelExport(List<Students> list);
List<SelectListItem> GetDateRange();
}
和 StudentService 类的实现:
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() 之类的方法放在不使用其存储库中的方法的服务类中是否有意义? (可能例如:_repository.GetDateRange())
或者将它们放在控制器中更好?
【问题讨论】:
-
服务应该只返回业务数据。将业务数据转换为视图模型和 UI 的其他可视类型应该在控制器级别完成。所以这个服务的方法应该只返回数据,在控制器中你应该从该数据创建选择项列表。
标签: asp.net-mvc repository-pattern n-tier-architecture service-layer