如何使用正确的设计模式保存文件?

时间:2013-08-13 15:53:28

标签: c# asp.net-mvc design-patterns

我已经完成了尽职调查并且已经搜索了一段时间,但我对设计模式了解不够,无法找到有用的示例。文件上传如何影响设计模式?这些是否应包含在存储库模式中?

所以我的问题是双重的:

  • 文件上传是否应包含在传入的对象中 存储库然后保存在那里?

  • 或者单独的对象是否应使用其他特定模式处理此问题?

非常感谢一个简单的例子!

2 个答案:

答案 0 :(得分:1)

如果您在谈论控制器中的上传文件,您可以执行以下操作:

<强>控制器:

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实现。您可能有一个文件存储库,对不同的环境等采取不同的行为。

答案 1 :(得分:0)

  

文件上传是否应包含在传入的对象中   存储库然后保存在那里?

是的,当您保留上传的文件时,您可以使用存储库。

例如

var repository = GetRepository();
repository.SaveFile(File file);
  

或者单独的对象是否应使用工厂模式处理此问题?

不,工厂模式用于创建对象实例。