Должен ли я создавать файлы в Интернете или на уровне приложений? - PullRequest
1 голос
/ 02 августа 2011

У меня есть трехуровневое веб-приложение (база данных, уровень приложения, веб-уровень), написанное на MVC.

Я хочу создавать файлы Excel во время выполнения, используя данные из базы данных.

Моя первоначальная идея - обратиться к библиотеке Excel в веб-проекте и сгенерировать файл в контроллере.Я могу передать его прямо в ответ и обработать файл как представление данных.У меня уже есть служебный метод, который возвращает данные из базы данных, как они используются на странице.

Я рассматриваю создание файла на уровне приложения и затем возвращаю byte[] на веб-уровень.Аргумент здесь заключается в том, что генерация файла является частью бизнес-логики .

Что бы вы сделали?

Ответы [ 3 ]

1 голос
/ 03 августа 2011

Выход Excel на самом деле является обязанностью просмотра, поэтому вы ДОЛЖНЫ сделать это в контроллере.Уровень модели / приложения отвечает только за данные, а не за их представление.

Если вы используете ASP.Net MVC, вы можете объявить ExcelActionResult, который принимает модель представления и преобразует ее в CSV / Excel.выход.Некоторая связанная информация:

Пользовательское действие экспорта в Excel

http://stephenwalther.com/blog/archive/2008/06/16/asp-net-mvc-tip-2-create-a-custom-action-result-that-returns-microsoft-excel-documents.aspx

0 голосов
/ 03 августа 2011

В зависимости от степени форматирования я могу создать отчет служб Reporting Services (RS) и использовать веб-службу RS для получения электронной таблицы Excel из данных в базе данных.

0 голосов
/ 02 августа 2011

Согласен, это правильный способ создания файла на BLL (уровень приложения).Посмотрите, как мы справились с этим в нашем проекте .Это немного сложнее, потому что наша модель экспорта / импорта подключаема, но, возможно, это может иметь смысл для вас.

Сначала мы описали 2 интерфейса:

/// <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
    }

Мы можем реализовать эти интерфейсыдля любого вида импорта / экспорта.Итак, мы обрабатываем данные импорта / экспорта на уровне BLL (уровень приложения), а затем, в случае экспорта, отправляем их на уровень представления (уровень веб-сайта).Уровень представления разрешает расширения файлов по типу MIME и возвращает результат File:

return File(data, mimeType, String.Format("export.{0}",  MimeTypeHelper.GetExtByMimeType(mimeType)));

Таким образом, уровню представления не требуется знать, какой формат импорта / экспорта использовался.Все, что требуется на уровне представления для получения / отправки данных от пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...