Список <> лучше, чем DataSet для уровня пользовательского интерфейса в ASP.Net?

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

Поэтому я задаюсь вопросом: лучше ли читать мои данныеDataReader и использовать его, чтобы заполнитьList или заполнитьDataSet и отправить DataSet на уровень пользовательского интерфейса ??. I '

Я заинтересован в хорошей производительности и масштабируемости.

Ответы на вопрос(8)

> если вы просто читаете из БД и представляете на пользовательском интерфейсе. DataSet - довольно сложный и тяжелый класс, поэтому я хотел бы использовать его только для тех из вас, кому нужны его специальные функции, такие как отложенные обновления, связи с данными и т. Д.

List Тип-безопасный - Вы всегда знаете, что выВы получаете, и вам никогда (редко) не придется беспокоиться о кастинге. Ты неэто роскошь с DataSet.

List также есть все встроенные вспомогательные методы Linq, если вына 3.0

но с точки зрения обслуживания и читабельности использования списка <> намного лучше

Одна большая проблема с использованием наборов данных с таблицами данных состоит в том, что у следующего парня, который будет работать над кодом, будет большая проблема с выяснением того, какие таблицы находятся в данном наборе данных, особенно если учесть привычку, которую многие люди имеют, кажется, создавать новые таблицы и добавление их в набор для последующего использования.

Со списком объектов он строго типизирован и явен, более того, структура объекта хорошо известна, и ссылки на свойства будут меняться вместе с объектом. Часто с таблицами данных люди прибегают к ссылкам на столбцы по индексу, а не по имени, которое является бомбой замедленного действия.

Если производительность является проблемой, тогда посмотрите на другие общие коллекции, такие вещи, как словарь, имеют очень хорошие свойства поиска ключей (очевидно, почти n (1)), которые могут оказать огромное влияние в правильных местах.

Очевидно, это находится на вершине дискуссии об интерфейсах, и я предполагаю, что вы знаете, как вы хотите показать функциональность ваших объектов.

Сравнение производительности: методы доступа к данным, Он довольно старый, но содержит полезную информацию о производительности между DataSet, DataRader и XmlReader.

что было бы лучше использовать ваши пользовательские объекты вместо набора данных. Лучше всего, чтобы уровни пользовательского интерфейса и бизнеса были слепыми к тому, как вы реализуете свой доступ к данным. Любой способ, которым вы фактически общаетесь с вашим источником данных (db, xml, ect.), Должен содержаться на вашем уровне доступа к данным, а ваш бизнес-уровень должен просто ожидать ваших пользовательских объектов.

Решение Вопроса

ратегии доступа к данным - он не долженне иметь дело с необработанными данными. Таким образом, ваш пользовательский интерфейс должен взаимодействовать исключительно с объектами вашего домена (напрямую или через сервисный уровень).

Затем вы можете иметь слой пользовательского интерфейса для создания структур данных, которые ему необходимы для визуализации. Любые проблемы производительности могут быть смягчены с помощью стратегии кэширования.

Это влияет на удобочитаемость, тестируемость и удобство сопровождения кода, что всегда должно быть долгосрочной и краткосрочной целью любого проекта.

Я думаю в идеале тыЯ хотел бы увидеть что-то вроде этого:

 UI
 /|\
  |
SERVICE (? depending on the design)
 /|\
  |
DOMAIN
 /|\
  |
 DCO
 /|\
  |
 DAL

РЕДАКТИРОВАТЬ:

С другой стороны, если выЕсли вы создаете очень прямолинейное приложение WebForms, вы можете отказаться от некоторых из этих сложностей и просто использовать конструкторы, предоставляемые Visual Studio. Я'однако мы обнаружили, что приложения часто развиваются за пределами возможностей интерфейса перетаскивания, и в конечном итоге вам приходится проводить рефакторинг в более отделенный дизайн.

Вы всегда должны знать, что вы можете получить / потерять, выбирая архитектурную стратегию. Если вы можете жить (на грани) без тестирования, снижения читабельности и более тесной связи пользовательского интерфейса с данными ****, то вы содрогнетесь ****, тогда, возможно, более простой подход для вас.

Некоторые ссылки для дальнейшего чтения

ТВЕРДЫЕ принципы ООДФаулерас PoEEMSDN: шаблоны и практики

взгляните на программный код строго типизированного набора данных, и вы можете сами решить;)

ListIList или даже лучшеIQueryable Вы можете скрыть детали реализации за границей интерфейса. Это освобождает вас, чтобы изменить способ обработки поиска в более позднее время.

 Cylon Cat10 нояб. 2009 г., 16:28
Я бы не рекомендовал передавать IQueryable <T> в коде пользовательского интерфейса, так как IQueryable <T> все еще подключен к контексту данных и может выполнять запросы. (Или, что еще хуже, произойдет сбой, если контекст данных больше не находится в области видимости.) List <T>, Словарь <К, Т> и LookUp <К, Т> все хорошо, хотя.
 Cylon Cat11 нояб. 2009 г., 06:09
Проблема с этим подходом заключается в том, что IQueryable привязан к контексту данных или контексту объекта, а обеспечение отложенной сортировки или разбиения на страницы подразумевает, что контекст остается в течение длительного времени. Обычно контекст должен приходить и уходить в течение жизненного цикла одной страницы. В противном случае вы рискуете устаревшими данными, кэшированными в контексте.
 Josh10 нояб. 2009 г., 16:33
Использование IQueryable <T> имеет некоторые конкретные преимущества, особенно когда пользовательский интерфейс управляет фильтрацией, сортировкой и разбиением на страницы. Ayende Rahien приводит убедительные аргументы в пользу такого подхода здесь:ayende.com/Blog/archive/2009/04/18/...

Ваш ответ на вопрос