在引入视图模型后,由于需要将视图模型转换为模型,因此控制器中的代码开始变得多了起来。
可以引入一个中间层,专门负责视图模型和模型之间的转换,我们把这个层次称为Service(服务层,业务层)。
在项目根目录下创建一个名为Services的文件夹,并在Services文件夹下创建Service类MajorService。
在MajorService中添加Insert方法,此方法接收MajorViewModel类型的参数,并调用将MajorViewModel类型的数据转换为Major类型的数据,并插入到数据库中。
由于插入数据需要引入MajorRepo的实例,因此还需要在构造函数中添加MajorRepo类型的参数注入实例。
最终代码如下:
public class MajorService(MajorRepo majorRepo)
{
public void Insert(MajorViewModel model)
{
Major major = new Major()
{
Name = model.Name,
};
majorRepo.Insert(major);
}
}
在Program.cs中添加services.AddScoped<MajorService>();
。
services.AddScoped<MajorRepo>();
services.AddScoped<GradeRepo>();
services.AddScoped<ClassRepo>();
services.AddScoped<StudentRepo>();
services.AddScoped<MajorService>();
有了MajorService之后,就不需要在控制器中直接引入MajorRepo的实例,而是可以引入MajorService的实例,调用它的Insert方法。
代码如下:
public class MajorController(MajorService majorService) : Controller
{
public IActionResult Index()
{
return View();
}
public IActionResult Add()
{
return View();
}
[HttpPost]
public IActionResult Add(MajorViewModel model)
{
majorService.Insert(model);
return RedirectToAction("Index");
}
}