代码之家  ›  专栏  ›  技术社区  ›  Terry_Brown

将HttpFileCollectionBase传递到业务层-错误?

  •  3
  • Terry_Brown  · 技术社区  · 16 年前

    希望有一个简单的解决办法。

    我有我的MVC2项目,它允许上传某些形式的文件。我试图保持我的控制器精干,并在业务层处理这类事情。

    理想情况下,我想打电话给:

    UserService.SaveEvidenceFiles(MyUser user, HttpFileCollectionBase files);
    

    或者类似的东西,让我的业务层处理这些东西的保存方式和位置的逻辑。

    但是,在关注点分离等方面,让我的模型层引用System.Web,感觉有点恶心。

    因此,我们(我知道)有几个选择:

    1. web项目处理这个,我的控制器变得越来越胖
    2. 将HttpFileCollectionBase映射到我的业务层喜欢的东西

    我很乐意在这里得到一些关于这类事情的最佳实践方法的反馈,即使不是在上面的上下文中。

    2 回复  |  直到 16 年前
        1
  •  2
  •   metdos    16 年前

    如果你想不让逻辑进入你的控制器,我只需要使用一个定制的模型绑定器,然后你可以将提取的数据粘贴到模型中,你可以用它做你想做的事情。

    http://www.heartysoft.com/post/2010/05/06/ASPNET-MVC-ModelBinding-Multiple-File-Uploads-to-an-Array.aspx

    澄清 -我认为模型绑定和其他截取技术是一种将逻辑从控制器中分离出来并分成可单独维护的容器的方便方法—这是基础结构代码/web逻辑,因此不属于业务逻辑,因此可以引用System.web等。

    澄清

        2
  •  0
  •   benmmurphy    16 年前

    假设您不能轻松地模拟HttpFileCollectionBase,您可以传入类似Dictionary的内容<字符串,MyFile>其中MyFile包装HttpPostedFile。如果HttpFileCollectionBase可以很容易地用于单元测试的话,我看没有任何意义。