Переключение стратегии доступа к данным далеко в проект?

В проекте мы реализовали слой доступа к данным (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 видео, которые вы можете найти на странице проекта.

Другие вопросы по тегам