1

我正在逐渐将经典 ASP 网站转换为 ASP.Net MVC。在我的模型文件夹中,我将其进一步细分为业务对象 (BO)、业务逻辑 (BLL) 和数据访问层 (DAL),基本上是模型中的 3 层架构。到目前为止,这在数据库操作方面似乎运行良好,并且使我的控制器保持瘦身。例如,典型的控制器如下所示:

public ActionResult Index()
{
    UserName UserDetails = UserManager.GetUserName();
    CarrierList CarrierList = CarrierManager.GetCarrierList();
    return View(new CarrierViewModel(CarrierList, UserDetails));                     
}

基本上我只是使用控制器将一个函数传递给 BLL 层,该层又与 DAL 和 BO 层交互。

我感到困惑的是与非数据库操作(例如文件上传)相关的逻辑的正确位置。例如,我目前正在编写代码来上传 Excel 文件并将其内容导入数据库表。如果我遵循上述相同的模式,我的控制器应该只包含一个将文件上传请求传递给 BLL 层的函数,如下所示:

[HttpPost]
public ActionResult Index(HttpPostedFileBase file)
{   
    FileManager.ImportExcel(file);
    return RedirectToAction("Index");
}

问题是我看到的每个关于文件上传和 Excel 操作的教程或示例都将他们的文件和 Excel 代码直接放在控制器中。例如这里。甚至 Scott Hanselman 在这里的帖子似乎也暗示可以将文件上传逻辑放在控制器中。

我的问题是,鉴于我的 3 层 ASP.NET MVC 架构和胖模型/瘦控制器设计目标,通过将上传和 Excel 操作逻辑卸载到模型内的 BLL,我是否走在正确的轨道上?这似乎与我正在尝试做的事情一致,但是由于我在网上看到的所有示例都只是将文件操作逻辑放在控制器中,所以我觉得我违背了规律。

4

1 回答 1

1

您应该只获取流并将流传递给您的 BLL。这样,您的 BLL 不依赖于 HttpPostedFileBase,而仅依赖于 Stream。

无论如何,您的 BLL 代码似乎在您的 MVC 应用程序中,这不是一个好主意。您应该为 BLL 创建一个类库,为 BO 创建一个类库,为 DAL 创建一个类库,如果可能的话,将它们松散地连接在一起。

于 2013-05-03T20:40:10.423 回答