Asp.net mvc 我应该在Web或应用层生成文件吗?

Asp.net mvc 我应该在Web或应用层生成文件吗?,asp.net-mvc,web-applications,architecture,Asp.net Mvc,Web Applications,Architecture,我有一个用MVC编写的三层web应用程序数据库、应用程序层、web层 我想在运行时使用数据库中的数据生成Excel文件 我最初的想法是在web项目中引用Excel库,并在控制器中生成文件。我可以将其直接流式传输到响应,并且可以将该文件视为数据的不同视图。我已经有了一个服务方法,可以在页面上使用时从数据库返回数据 我正在考虑在应用层生成文件,然后将字节[]返回到web层。这里的论点是文件生成是业务逻辑的一部分 你会怎么做?我同意,这是在BLLapp层生成文件的正确方法。检查一下我们在我们的工作中是

我有一个用MVC编写的三层web应用程序数据库、应用程序层、web层

我想在运行时使用数据库中的数据生成Excel文件

我最初的想法是在web项目中引用Excel库,并在控制器中生成文件。我可以将其直接流式传输到响应,并且可以将该文件视为数据的不同视图。我已经有了一个服务方法,可以在页面上使用时从数据库返回数据

我正在考虑在应用层生成文件,然后将字节[]返回到web层。这里的论点是文件生成是业务逻辑的一部分


你会怎么做?

我同意,这是在BLLapp层生成文件的正确方法。检查一下我们在我们的工作中是如何完成的。这有点复杂,因为我们的导出/导入模型是可插拔的,但它可能对您有意义

首先,我们描述了两个接口:

/// <summary>
/// Defines methods and properties for an import provider.
/// </summary>
public interface IImportProvider : IExtension
{
    #region Methods
    /// <summary>
    /// Imports a data.
    /// </summary>
    /// <param name="data">The data to be imported.</param>
    /// <param name="mimeType">The data MIME type.</param>
    void Import(byte[] data, string mimeType);
    #endregion
}

public interface IExportProvider : IExtension
    {
        #region Methods
        /// <summary>
        /// Exports a data.
        /// </summary>
        /// <param name="mimeType">Contains the data MIME type when this method returns.</param>
        /// <returns>The exported date.</returns>
        byte[] Export(ref string mimeType);
        #endregion
    }

这样,表示层就不需要知道使用了什么样的导入/导出格式。表示层接收/发送用户数据所需的所有功能。

根据涉及的格式设置,我可以创建Reporting Services RS报表,并使用RS web服务从数据库中的数据获取excel电子表格。

excel输出实际上是视图的责任,因此,您必须在控制器中执行此操作。模型/应用层仅负责数据,而不负责数据的表示

如果您使用的是ASP.NETMVC,则可以声明一个ExcelActionResult,该结果将接受视图模型并将其转换为CSV/Excel输出。一些相关信息:


在控制器中生成文件字节,然后返回要由视图显示的字节,对我来说似乎是明智的。
return File(data, mimeType, String.Format("export.{0}",  MimeTypeHelper.GetExtByMimeType(mimeType)));