Сериализовать IEnumerable <T>через провод? - PullRequest
0 голосов
/ 11 августа 2009

Я использую распределенное веб-приложение с сервером базы данных, содержащим базу данных SQL Server 2005, сервер приложений, на котором мы установили трехуровневое приложение-службу Microsoft, и веб-сервер, на котором я использую MVP с контролирующим контроллером.

Мой уровень обслуживания на сервере приложений возвращает IEnumerable<Country>, когда я запрашиваю список, скажем, стран. Сервисный уровень вызывает компонент доступа к данным, который выдает сущности, подобные этой:

public virtual IEnumerable<T> FillList(DbCommand command, DataContext context)
{
    using (IDataReader dataReader = this.ExecuteReader(command, context))
    {
        while (dataReader.Read())
        {
            T entity = this.Fill(dataReader, context);
            yield return entity;
        }
    }
}

Теперь я немного обеспокоен подключением к моей базе данных, так как оно останется открытым, когда я сериализую сущности через WCF для моего контроллера. Мой первый вопрос: действительно ли важно оставить открытым соединение с моей базой данных при сериализации сущности на сущность моему контроллеру? Преимущество этого решения в том, что я могу использовать LINQ даже над большими коллекциями (не LINQ to SQL).

Я придумал это решение: на уровне сервиса я всегда возвращаю список, например:

public virtual List<T> GetList()
{
    List<T> list = new List<T>();
    list.AddRange(this.dataAccess.GetList()));
    return list;
}

Но здесь я возвращаю полный список контроллеру, и, возможно, мне нужны только некоторые элементы из списка. Мой второй вопрос, если это хороший дизайн?

Ждем ваших предложений!

1 Ответ

0 голосов
/ 12 августа 2009

Я не вижу особых проблем с дизайном.

Конечно, вы должны быть осторожны с тем, что означает T в List<T>. Не возвращайте список объектов со всеми видами поведения и не возвращайте типы, специфичные для .NET - например, DataSet и DataTable - плохая идея. Используйте простые классы со свойствами примитивных типов, списки и массивы примитивных типов, списки и массивы этих простых классов и т. Д.

...