Какой ваш любимый способ взаимодействия с базами данных на вашем языке программирования?

Существует множество способов подключения и взаимодействия со слоем базы данных. Например, в Java обычно используются вызовы JDBC необработанного SQL, реляционные сопоставители объектов, JDBCTemplate ( Spring), хранимые процедуры и т. Д.

На каком языке вы предпочитаете и почему? Когда вы рассмотрите другие?

16 ответов

Решение

ORM каждый раз, чем меньше я должен думать о базах данных, тем лучше.

Мне очень нравится 3 + 1 уровень ведения дел. Один уровень для пользовательского интерфейса, один для бизнес-логики и для постоянных данных. Последний, который вы говорите? Доменные объекты и интерфейсы. Это позволяет загрузить один или два основных уровня плюс "уровень" домена, и код должен работать.

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

Уровень пользовательского интерфейса делает прямо противоположное. Он отображает и принимает данные способом, к которому пользователь может относиться, и отображает данные, которые выводятся / вводятся в и из формата объекта домена.

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

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

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

</rant>

Редактировать: О да. Это верно как для LINQ, SubSonic, так и для других ORM.

ActiveRecord от Ruby on Rails вытирает пол всем, что я видел до сих пор. Похоже, что в некоторых случаях LINQ может быть лучше, но ActiveRecord настолько гибок.

LINQ - это путь для меня с этого момента

Я предпочитаю строить слой модели бизнес-объектов (объекты и совокупности объектов).

Я строю возможность взаимодействия с базой данных в каждом объекте / коллекции (для SQL Server я использую System.Data.SqlClient). Я использовал этот шаблон для SQL Server, MySQL и Oracle.

Затем я взаимодействую с объектами из моего кода приложения.

Абстрагируя мою базу данных в объекты, код моего приложения остается неизменным независимо от базы данных.

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

  • При чтении информации на странице для отображения и для обновления пользователем мы используем Hibernate
  • При обработке пакета обновлений или обобщении того, где большая часть данных уже находится в базе данных (например, обработка на конец дня), мы используем PL/SQL (и пытаемся думать в наборах)
  • Когда пользователь выполняет поиск или запускает сводный отчет, мы используем ibatis sqlmaps для создания некоторого SQL-кода и возвращаем только те поля, которые нам интересны (не каждый столбец и, конечно, не ненужные дочерние строки, ургх)
  • Все, что действительно должно работать быстро, мы используем тот подход, который лучше всего работает

Это с Java/Oracle.

ORM действительно фантастический.

Я использую SQL Alchemy при работе в Python - он работает практически со всеми СУБД, с которыми я сталкивался.

Для легких приложений, управляемых данными в MacOS X, я использую Core Data, у которой есть отличный инструмент для моделирования данных, доступный через Xcode.

Оба из них показывают, что ORM сделано правильно, отлично. У меня было меньше успеха и удовольствия с EJB.

Я еще не попал в мир LINQ, но я действительно полюбил классы DataTable/TableAdapter, которые Visual Studio сделала с помощью набора данных XSD. С помощью нескольких перетаскиваний и кликов после создания схемы базы данных у меня теперь есть объект DataSet/DataTable, который строго типизирован, и у меня есть методы адаптера, которые используют параметризованные запросы к моим хранимым процедурам для всех моих операторов CRUD. Он даже создаст адаптеры таблиц запросов для некоторых из тех процедур, которые не связаны напрямую с таблицей.

Да, и если вы еще не создали хранимые процедуры и у вас есть только таблицы, мастер создаст для вас процедуры или специальные операторы SQL.

Это произошло с Visual Studio 2005 и значительно сократило мое время "структурирования" с моими новыми веб-приложениями, и я могу больше сосредоточиться на логике бизнеса и презентаций.

В настоящее время мы используем ODAC для связи с базой данных Oracle и используем множество пакетов Oracle ( PL / SQL). N-уровневая система выполняется с помощью RemObjects, что означает, что у нашего клиента нет никакого SQL-кода, и ему нужна только возможность отправлять HTTP-запросы, поэтому нет накладных расходов на установку.

Все это делается с помощью Borland Delphi и просыпается 2 года в производственной среде.

Я использую простой JDBC, потому что я разрабатываю приложение, управляемое данными, и моя модель базы данных очень сложна. Все описано в базе данных, даже структура других таблиц. В дополнение к этому я часто использую хранимые процедуры. Поэтому ORM не вариант для меня.

Мы используем Delphi и Oracle Data Access Components (ODAC) и ADO через Oracle.OleDBProvider.

В C# я люблю LINQ to SQL для всего нового, но мне действительно нравится использовать .netTiers + CodeSmith Generator, чтобы получить быстрый и грязный слой данных в базе данных, если я использую C# в.NET 2.0.

Мне очень нравится Hibernate:)

Я знаю, что у него есть кривая обучения, но как только вы освоите его, это довольно приятно.

Само собой разумеется, я не могу ждать, чтобы получить в свои руки новую http://ADO.NET%20Entity%20Framework в.NET 3.5 SP1 (я знаю, что это уже доступно, но я немного ленив, чтобы напечатать XML:))

Любимым способом является использование Smalltalk с хранилищем объектов GemStone. Зачем? Нет проблем ORM для решения. Я бы рассмотрел только что-то другое, если бы его заставил или угрожал мой работодатель.

ActiveRecord, который является шаблоном, задокументированным первым (я думаю) в " Образцах корпоративной архитектуры" Фаулера. Я считаю, что он реализован на языках, отличных от Ruby, хотя он хорошо известен как базовая технология в Rails. Как бы то ни было, это аккуратная абстракция базы данных, хотя я должен признаться, что нахожу ее немного неуклюжей и в области find_by_sql. Но это может быть только я.

Но (надевая сейчас Grumpy Old Man) все ORM в мире не могут заменить хорошее знание SQL, без которого я действительно не хочу видеть, что доступ к RDBMS вообще разрешен.

Мой любимый способ - создать слой абстракции объектов. В идеале это единственное место, которое работает с SQL. Но на практике объектам иногда необходимо выполнять SQL-операции. Но ничего за пределами объекта.

До сих пор я сам писал такие слои, потому что то, что было доступно, было слишком неудобным, слишком медленным или слишком большим.

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