Действительно ли профессионально использовать элементы управления источником данных в ASP.NET?
Я нахожусь в процессе изучения ASP.NET. Я купил несколько книг на эту тему. Все они предполагают, что использование элементов управления источником данных, таких как ObjectDataSource/SqlDataSource и т. Д. Я определенно не эксперт по этому вопросу, на самом деле это далеко не так. но у меня есть сильное чувство, что это игрушечные инструменты. Мне трудно поверить, что эти классы будут использоваться в реальных приложениях корпоративного уровня. Я прав? Или эти классы действительно имеют место в крупномасштабных веб-приложениях?
Спасибо Ави
8 ответов
Эти элементы управления приобрели плохую репутацию из-за того, что неопытные разработчики используют их, не понимая их, и профессиональные разработчики смотрят на них свысока. Лучший совет, который я могу вам дать, заключается в том, что профессионал будет использовать любой инструмент, который является наиболее подходящим, и который выполняет работу, не мешая. Если эти инструменты выполняют работу за вас, то вы должны их использовать и не позволять людям за это вас опускать.
Я согласен с Уайеттом и решил добавить немного больше информации. Проблема со всеми объектами источника данных (кроме ObjectDataSource) заключается в том, что вы не можете разделить свое приложение на логические уровни (например, пользовательский интерфейс, бизнес-логика, доступ к данным). Вы помещаете весь свой код доступа к данным в свой пользовательский интерфейс, и это очень плохо с точки зрения архитектуры вашего проекта.
Первое, что вам нужно осознать в ASP.NET, это то, что все, что связано с серверными элементами управления и парадигмой вебформ в целом, никогда не будет работать так же хорошо, как Response.Write(). Вся идея вебформ заключается в том, чтобы доставить вас из точки А в точку Б как можно быстрее. Итак, прежде чем выбрать веб-формы, вы должны спросить себя, это лучший фреймворк для моего приложения? Для сайтов с большим трафиком и / или если вы сильно заботитесь о шаблонах дизайна, я бы без сомнения выбрал MVC.
Теперь, если вы выбираете веб-формы, я настоятельно рекомендую вам использовать элементы управления источниками данных. Это сделает вашу жизнь проще. Я не знаю, как вы определяете приложения корпоративного уровня, но средства управления источниками данных могут достичь больших результатов. Я рекомендую вам взглянуть на LinqDataSource, EntityDataSource, новый DomainDataSource, новый QueryExtender и как они работают с любым источником IQueryable.
Я думаю, что можно утверждать, что использование ObjectDataSource является разумным, если предположить, что оно на самом деле говорит с реальным промежуточным уровнем объектов. Особенно, если разработчики расширяют ODS, чтобы играть со своим средним уровнем.
Остальные сломают тебе пальцы (второе нарушение) в моем магазине.
Утверждение, что элемент управления источником данных помещает код непосредственно в форму, не обязательно является правильным утверждением. Обычно у вас есть класс контроллера, и вы привязываете элемент управления источником данных к методу контроллера.
У вас все еще есть средний уровень и все остальное. Как заявил один из авторов, как правило, опытные разработчики разрушают ценность этих контроллеров. Они обрабатывают всю информацию для страницы, и у вас все еще есть разделение между пользовательским интерфейсом и средним уровнем (контроллером).
Но это также зависит от того, являетесь ли вы более опытным программистом, предпочитающим доменные объекты, а не наборы данных.
Не могу согласиться с тем, что в современном мире модульного тестирования, DDD, TDD и т. Д. В современном мире модульного тестирования очень плохо сочетаются элементы соединения с базой данных с HTML, потенциально бизнес-логикой и т. Д.
Будут ситуации, когда они уместны (возможно, самые простые из задач по составлению отчетов, которые нужно делать в спешке, макеты), но в целом избегайте их.
Они отлично подходят для заполнения привязанного элемента управления, если запрос прост, например, выпадающий список категорий. Они довольно болезненны для выполнения пользовательских поисков или тому подобного. Оцените ваш подход в каждом конкретном случае.
Лично я предпочитаю подключать вещи самостоятельно. Довольно просто запустить хранимые процедуры для извлечения данных и назначения их элементам управления вводом данных без использования привязки данных. Также легко получить измененные данные и добавлять, обновлять или удалять по мере необходимости. Классы источника данных добавляют то, что мне кажется ненужным дополнительным слоем. Если бы они были значительно проще, чем то, как я это делаю, я мог бы дать им шанс, но они кажутся мне довольно сложными. И, хотя у меня нет никаких контрольных данных, чтобы доказать это, кажется, что они должны быть менее эффективными.