我已经尽职尽责并搜索了一段时间,但我对设计模式的了解还不够,无法找到有用的示例。文件上传如何影响设计模式?这些是否应该包含在存储库模式中?
所以我的问题有两个:
文件上传是否应该包含在传递到存储库中的对象中,然后保存在那里?
或者一个单独的对象应该使用其他特定的模式来处理这个问题?
一个简单的例子将不胜感激!
我已经尽职尽责并搜索了一段时间,但我对设计模式的了解还不够,无法找到有用的示例。文件上传如何影响设计模式?这些是否应该包含在存储库模式中?
所以我的问题有两个:
文件上传是否应该包含在传递到存储库中的对象中,然后保存在那里?
或者一个单独的对象应该使用其他特定的模式来处理这个问题?
一个简单的例子将不胜感激!
如果您正在谈论控制器中上传的文件,您可以执行以下操作:
控制器:
public class MyController
{
private readonly IFileRepository _fileRepository;
//Wire up the IFileRepository injection via IoC container (Ninject, StructureMap, etc.)
public MyController(IFileRepository fileRepository)
{
_fileRepository = fileRepository;
}
[HttpPost]
public ActionResult SaveFile(HttpPostedFileBase file) //assuming you're just posting a file
{
//note: instead of HttpPostedFileBase you could iterate through
// Request.Files
if(file == null)
{
//do something here b/c the file wasn't posted...
}
try
{
_fileRepository.Save(file);
}
catch(Exception ex)
{
//log exception...display friendly message to user, etc...
}
return View("MyView");
}
}
IFileRepository
public interface IFileRepository
{
void SaveFile(HttpPostedFileBase file);
}
//concrete implementation
public class FileRepository : IFileRepository
{
public void SaveFile(HttpPostedFileBase file)
{
//your file saving logic, ie. file.SaveAs(), etc...
}
}
注入接口的优点是它允许更轻松的单元测试,并且还允许 IFileRepository 的不同实现。您可能有一个文件存储库,对于不同的环境等行为不同。
文件上传是否应该包含在传递到存储库中的对象中,然后保存在那里?
是的,当您持久化上传的文件时,您可以使用存储库。
例如
var repository = GetRepository();
repository.SaveFile(File file);
还是应该由一个单独的对象使用工厂模式来处理这个?
不,工厂模式用于创建对象实例。