SqlDataSource vs ObjectDataSource - PullRequest
16 голосов
/ 30 июля 2009

Если веб-странице требуются некоторые данные, почему бы просто не вызвать SQLDataSource для вызова хранимой процедуры? Зачем использовать ObjectDataSource для вызова бизнес-объекта, который затем вызывает хранимую процедуру? Я понимаю, что другие приложения (скажем, приложения для настольных компьютеров), созданные на основе .net, могут обращаться к бизнес-объектам, но что, если приложение всегда будет только веб-приложением?

Чтобы быть более понятным:

Когда следует использовать SqlDataSource или ObjectDataSource?

Как мотивировать выбор?

Ответы [ 4 ]

23 голосов
/ 30 июля 2009

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

Однако, когда приложение спроектировано и построено для долгосрочной перспективе и ожидает, что вещи (требования, пожелания клиентов, в конечном итоге схема базы данных) могут измениться, тогда может оказаться гораздо более разумным ввести правильный бизнес. «Слой - смоделируйте свои бизнес-объекты как объекты, а затем предоставьте сопоставление из базовой базы данных с этими бизнес-объектами.

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

УВЕРЕН: вы можете перейти прямо к базе данных, и, конечно, сначала и для первой итерации это, возможно (или, вероятно), самый быстрый путь. Но в долгосрочной перспективе, когда приложение рассчитано на длительную работу, обычно это быстрый, «грязный» и «грязный» путь - стоимость обслуживания, стоимость обслуживания, затраты и усилия, необходимые для изменения в соответствии с вашим и потребности вашего клиента будут расти и довольно быстро, это быстрое и грязное решение уже не выглядит так здорово с точки зрения усилий.

Итак, чтобы подвести итог моей точке зрения: да, изначально, использование прямого источника данных SQL может быть быстрее и проще - поэтому используйте его, когда это важно: чтобы сделать вещи для быстрой демонстрации, проверки концепции приложение стиля Но в долгосрочной перспективе, когда вы смотрите на срок службы приложения, обычно стоит вложить немного больше (дизайн и кодирование) усилий, чтобы добавить этот уровень абстракции, чтобы ваши веб-страницы не зависели напрямую от деталей база данных внизу.

Марк

3 голосов
/ 30 июля 2009

Если у вас есть бизнес-уровень, который вы используете в своих проектах, ObjectDataSource является естественным выбором. Это хорошо подходит для многих ORM, и многие из них предоставляют дополнительные преимущества (проверка, отмена и т. Д.). Он также позволяет получить доступ к любым другим свойствам и методам, которые есть у ваших бизнес-объектов, а не только к прямым полям SQL. Это может оказаться очень полезным при связывании - поскольку позволяет просто связывать свойства в разметке вместо того, чтобы писать много кода позади.

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

Если у вас нет бизнес-уровня и вы просто используете SQL, используйте SQLDataSource. Лично я предпочитаю, чтобы весь ваш код SQL был на уровне бизнеса или данных, и поэтому я почти никогда не использую SQLDataSource.

1 голос
/ 12 февраля 2014

В теории объектный источник данных лучше. Но все зависит от того, насколько хорошо объектная модель написана и документирована. Мы привлекли компанию, которая использовала собственный генератор кода (который они не предоставили бы нам) для создания всех слоев. Оказалось кошмаром вносить даже небольшие изменения, такие как добавление свойства или изменение типа поля. Сейчас я уничтожаю практически все, что они сделали, и просто использую хранимые процедуры, которые они написали.

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

1 голос
/ 06 мая 2012

, если вы можете применить свой код бизнес-уровня в хранимой процедуре лучше использовать SQLDataSource

...