В прошлом я обычно использовал классы для представления своих данных в приложениях, которые я проектирую и создаю. Но в веб-приложениях это, кажется, не нужно / не применимо, потому что данные хранятся в базе данных, и такие вещи, как DataSet
, отлично работают для извлечения и сохранения данных.
В настоящее время я работаю с ASP.NET, и элементы управления с привязкой к данным (такие как GridView
), похоже, любят привязываться к SqlDataSource
, ObjectDataSource
, DataView
и т. Д. Итак, учитывая статический * Класс 1008 *, который вытаскивает DataSet
из базы данных, мой код страницы, ориентированный на данные, часто выглядит примерно так:
DataSet employeeData = MyDB.GetData();
DataView dvEmpData = new DataView(employeeData);
grdData.DataSource = dvEmpData;
grdData.DataBind();
Таким образом, у меня, как правило, нет классов данных, соответствующих схеме моей базы данных. Но новые разработки, такие как POCO и EF Framework, поддерживают создание и использование этих классов. В чем преимущество этого? Мои идеи:
- Ошибки во время компиляции, в которых ошибки могли бы остаться незамеченными до времени выполнения.
employeeData[0].Rows[i]["Name"]
не так хорош, как employees[i].Name
, где employees
- это IEnumerable<Employee>
- В C # 3 и более поздних версиях - возможность использовать LINQ и классные методы расширения в
IEnumerable<T>
для гибкой фильтрации коллекций данных вместо необходимости создавать / изменять хранимую процедуру или запрос в базе данных для каждой агрегации / выбора, которые мне нужно сделать .
- Исходный код легче хранить в SCM, чем в базе данных, что означает, что лучше хранить больше логики в исходном коде.
- Такой парень, как я, который изучил CS, занимаясь локальными приложениями, чувствует себя более комфортно
С другой стороны, преобразование данных в классы .NET перед их отображением на экране - это шаг, который займет вычислительное время и не является строго обязательным. И у меня есть ощущение, что GridView
и его соотечественники предпочтут привязку к DataView
вместо IEnumerable<T>
. Кроме того, база данных будет быстрее запрашивать и агрегировать данные, чем LINQ.
Какова причина подхода, одобренного POCO? Я здесь это освещал или что-то упустил?