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

StackOverflow https://stackoverflow.com/questions/8087

  •  08-06-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

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

</rant>

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

Ruby на рельсах ' Активная запись вытирает пол всем остальным, что я видел до сих пор. LINQ похоже, в некоторых случаях это могло бы быть лучше, но ActiveRecord просто такой гибкий.

LINQ - это путь, которым я должен идти с этого момента

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

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

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

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

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

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

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

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

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

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

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

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

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

Это связано с java / Oracle.

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

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

Мы используем компоненты доступа к данным Delphi и Oracle (ODAC) и ADO через Oracle.OleDBProvider.

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

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

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

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

Мне нравится Впадать в спящий режим очень много :)

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

Излишне говорить, что я не могу дождаться, когда заполучу в свои руки новый Структура сущностей в .NET 3.5 SP1 (я знаю, что он уже доступен, но мне немного лень вводить XML :) )

В C # я люблю ССЫЛКА на SQL для чего-нибудь нового, но мне действительно нравится использовать .Неттье + Генератор кодов чтобы получить быстрый и грязный уровень данных в базе данных, если я использую C # в .NET 2.0.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top