我的项目中有画廊。我将图像保存在硬盘驱动器上但标签,描述等。我保存到数据库中。 使用通过服务层的数据库和数据验证。 由于用户已删除图像,因此文件将从硬盘驱动器中删除,并且记录将从数据库中删除。
//Action
public ActionResult Delete (int id)
(
var entity = ServiceLayer.Entities.Get (id);
System.IO.File.Delete (entity.FileName); //Might it be also be put to the service layer?
ServiceLayer.Entities.Delete (entit);
return RedirectToAction ( "Index");
)
在服务级别或控制器中放置删除文件的代码是否更好?
答案 0 :(得分:3)
您应该始终将此类代码放在服务中。
控制器应尽可能少 - 它应该知道如何获取服务,传递任何参数并返回视图。
即使代码目前很简单,但它可能会随着时间的推移而增长,这是确保您拥有良好结构的好方法。
答案 1 :(得分:2)
最好在服务层执行此操作。
控制器应该只处理用户请求的内容,调用所需服务以完成用户想要的操作,并向用户显示他们应该看到的内容。
答案 2 :(得分:0)
我会把它放在服务层上,这样你就可以抽象它并用TDD测试它。
答案 3 :(得分:0)
你需要问自己一个问题,我的控制器负责什么?
恕我直言,控制者应该充当视图和模型之间的中介,其中模型在这种情况下包括服务。
那就是说,从来没有严格的规定在哪里放什么。与发表严格答案的狂热者不同,我会采取务实的态度。将文件系统依赖性添加到数据库服务会使它更有用吗?是否会导致类型爆炸 - 您的服务需要具有文件系统依赖性injectet == +1 interface +1具体实现+1测试类,以防单元测试等。
Somtiems它不值得,所以用你自己的判断。