Переключение стратегии доступа к данным далеко в проект?
В проекте мы реализовали слой доступа к данным (DAL) с помощью визуального дизайнера, который автоматически генерирует много кода (в нашем случае: строго типизированные DataSets и DataSetTableAdapters в.NET).
Однако, используя систему контроля версий, я нахожу трудным редактировать и добавлять новые вещи в DAL. Мы начали кодировать доступ к новым данным, написав вручную операторы SQL (в нашем случае: ADO.NET SqlCommands и т. Д.), Что мне кажется более понятным для редактирования, и особенно для того, чтобы увидеть изменения в системе контроля версий.
Но я также обеспокоен смешением методов доступа к данным. Что ты предлагаешь? Придерживайтесь метода автоматической генерации, продолжайте преобразовывать в "ручные" операторы SQL, когда требуются изменения, или что-то еще?
Изменить: Вдохновленный хорошими ответами, которые касаются общей проблемы переключения стратегии доступа к данным, я обобщил формулировку вопроса.
Обработка данных модели не очень объектно-ориентирована. Мы используем.NET DataTables вместо пользовательских объектов.
6 ответов
Если выбор между преобразованием в ADO вручную или продолжением использования наборов данных + табличного адаптера, я думаю, что вам лучше остаться с наборами данных. Вы получаете бесплатный CRUD, используя его, и, следовательно, тратите меньше времени на создание и поддержку SQL, который не имеет никакой ценности.
То, как вы формулируете свой вопрос, не похоже, что вы идете и к более объектно-ориентированному подходу, который может стать аргументом для отказа от подхода набора данных + таблицы.
Возможно, вы захотите провести некоторое исследование / создание прототипа в области OR-mapper + чистые объекты, если у вас есть все более сложная бизнес-логика для обработки. Это менее эффективно для подхода RAD. Я бы проверил Linq 2 sql (если у вас простая схема / объектная структура и вы довольны отображением 1:1 между объектом и таблицей) или NHibernate на вашем месте. Entity Framework недостаточно развит. Следующая версия будет лучше, но она все еще потенциально долгое время впереди.
Да, придерживайтесь того, что у вас есть и рефакторинг по мере необходимости и удобно. Я ненавижу не соглашаться с другими ответами и путать вещи, но, используя другую структуру доступа к данным, вы можете обменять одну системную головную боль на другую. Пойдите со своими основами, с которыми вам удобно.
Переход к "голому" ADO.NET и выполнение всей работы DAL вручную в коде кажутся большими усилиями. Я бы определенно рекомендовал посмотреть на OR-маппер, такой как был рекомендован другими (NHibernate, Subsonic и т. Д.).
Если ваш бэкэнд в SQL Server и вы используете.NET 3.0 или выше, вы также можете взглянуть на Linq2SQL (слухи о его смерти сильно преувеличены) для более простых сценариев (отображение 1:1 из таблиц базы данных в ваши объекты уровня базы данных) или Entity Framework для более сложных сценариев (множество таблиц, множество объектов наследования в вашей доменной модели, сложные сценарии сопоставления).
В последнее время EF получал много плохого рэпа, что вполне оправданно, IMHO, и новая версия EF v4 (которая выйдет с.NET 4.0 и VS 2010 где-то в этом или следующем году) выглядит действительно многообещающе.
Марк
Если вы полностью переписываете свой DAL, то, возможно, вам стоит взглянуть на постоянную среду, такую как Sprint.NET или NHibernate.
DAL - обычно самая изощренная часть любого приложения. Сохраняйте это простым и создавайте то, что вам нужно сейчас, или разумно ожидайте, что это понадобится очень скоро. SqlCommand, SqlDataReader и т. Д. По-прежнему относительно абстрактны по сравнению с практическими возможностями подключения, чтения и записи в базу данных.
Тем не менее, ваш код будет более читабельным, если вы будете использовать только один общий подход.
... или SubSonic от Роба Конери:)
Посмотрите хотя бы 3 видео, которые вы можете найти на странице проекта.