WedX - журнал о программировании и компьютерных науках

Какова наилучшая практика для настойчивости прямо сейчас?

Я родом из Java.

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

Как я это вижу, есть 3 лагеря:

  • лагерь ОРМ
  • лагерь прямого запроса, например. JDBC/DAO, iBatis
  • Лагерь LINQ

Люди до сих пор вручную кодируют запросы (в обход ORM)? Почему, учитывая варианты, доступные через JPA, Django, Rails.

12.12.2008

Ответы:


1

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

Мы используем ADO.NET и хранимые процедуры для доступа к данным (хотя у нас есть некоторые вспомогательные средства, которые позволяют очень быстро писать, такие как генераторы оболочки классов SP, транслятор IDataRecord для объектов и некоторые процедуры более высокого порядка, инкапсулирующие общие шаблоны и обработку ошибок) .

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

12.12.2008

2

В настоящее время я читаю о сохраняющихся объектах в .net. Таким образом, я не могу предложить лучшую практику, но, возможно, мои идеи могут принести вам некоторую пользу. Еще несколько месяцев назад я всегда использовал запросы, написанные вручную, — плохая привычка со времен ASP.classic.

Linq2SQL — очень легкий и простой в использовании. Мне нравятся возможности строго типизированных запросов и тот факт, что SQL не выполняется сразу. Вместо этого он выполняется, когда ваш запрос готов (все фильтры применены), таким образом, вы можете разделить доступ к данным от фильтрации данных. Кроме того, Linq2SQL позволяет мне использовать объекты предметной области, которые отделены от объектов данных, которые генерируются динамически. Я не пробовал Linq2SQL в более крупном проекте, но пока это кажется многообещающим. О, он поддерживает только MS SQL, что очень жаль.

Entity Framework. Я немного поэкспериментировал с ним, и он мне не понравился. Кажется, он хочет сделать все за меня и плохо работает с хранимыми процедурами. EF поддерживает Linq2Entities, что опять-таки допускает строго типизированные запросы. Я думаю, что это ограничено MS SQL, но я могу ошибаться.

SubSonic 3.0 (альфа) — это более новая версия SubSonic, которая поддерживает Linq. Самое классное в SubSonic то, что он основан на файлах шаблонов (шаблоны T4, написанные на C#), которые вы можете легко модифицировать. Таким образом, если вы хотите, чтобы автоматически сгенерированный код выглядел иначе, просто измените его :). Я пока пробовал только предварительный просмотр, но сегодня посмотрю на альфу. Посмотрите здесь SubSonic 3 Alpha. Поддерживает MS SQL, но скоро будет поддерживать Oracle, MySql и т.д.

На данный момент мой вывод состоит в том, чтобы использовать Linq2SQL до тех пор, пока SubSonic не будет готов, а затем переключиться на него, поскольку шаблоны SubSonics позволяют гораздо больше настроек.

12.12.2008
  • Re: EF ограничен MS SQL - из коробки - да, но есть сторонние партнеры, разрабатывающие поставщиков для других СУБД. Так, например, если вам нужен ORACLE, то компания DevArt имеет как поставщика EF для ORACLE, так и реализацию LINQ-to-ORACLE. 28.06.2009

  • 3

    Есть как минимум еще один: Системная распространенность.

    Насколько я могу судить, то, что является оптимальным для вас, во многом зависит от ваших обстоятельств. Я понял, что для очень простых систем использование прямых запросов все еще может быть хорошей идеей. Кроме того, я видел, что Hibernate плохо работает со сложными устаревшими схемами базы данных, поэтому использование ORM не всегда может быть допустимым вариантом. Предполагается, что System Prevalence работает невероятно быстро, если у вас достаточно памяти, чтобы разместить все ваши объекты в оперативной памяти. Не знаю о LINQ, но я полагаю, что он тоже имеет свое применение.

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

    12.12.2008
  • распространенность системы ошибочно предполагает, что если вы сможете поместить все свои объекты в оперативную память, она будет работать быстро. ну не будет. есть отчеты, в которых даже современные сборщики мусора сходят с ума, когда им приходится обрабатывать миллионы объектов. также в наши дни, если у вас достаточно памяти на сервере базы данных, вы получаете аналогичную, а часто даже более высокую производительность, чем при использовании системы преобладания, поскольку базы данных оптимизированы для производительности, а ваш язык общего назначения и сборщик мусора - нет. 08.02.2010

  • 4

    Лучшая практика зависит от вашей ситуации.

    Если вам нужны объекты базы данных в табличных структурах с какой-то значимой структурой (например, один столбец на поле, одна строка на сущность и т. д.), вам нужен какой-то уровень перевода между объектами и базой данных. Они делятся на два лагеря:

    • Если в базе данных нет логики (только хранилище) и таблицы хорошо сопоставляются с объектами, то решение ORM может обеспечить быструю и надежную систему сохранения. Системы Java, такие как Toplink и Hibernate, являются зрелыми технологиями для этого.

    • Если в сохранении есть логика базы данных, или схема вашей базы данных значительно отклонилась от вашей объектной модели, хранимые процедуры, обернутые объектами доступа к данным (с дополнительными шаблонами, как вам нравится), немного сложнее, чем ORM. но более гибкий.

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

    12.12.2008
  • Re: первый лагерь, я не согласен, что с решением ORM проще. В системе сборки есть много настроек, чтобы заставить ее работать правильно. 14.12.2008

  • 5

    Я предпочитаю писать свой собственный SQL, но при этом применяю все свои методы рефакторинга и другие «хорошие вещи».

    Я написал уровни доступа к данным, генераторы кода ORM, уровни сохраняемости, управление транзакциями UnitOfWork и МНОГО SQL. Я делал это в системах всех форм и размеров, включая чрезвычайно высокопроизводительные потоки данных (сорок тысяч файлов, в общей сложности сорок миллионов транзакций в день, каждый из которых загружается в течение двух минут в режиме реального времени).

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

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

    Итак, используйте инструмент ORM в любом его проявлении, чтобы получить достойный пример — посмотрите, как он решает многие возникающие проблемы (генерация ключей, ассоциации, навигация и т. д.). Разорвите его вывод, сделайте его своим, а затем повторно используйте его, черт возьми.

    16.12.2008
  • Роб, Спасибо за ваши комментарии. Это очень поучительно. Я также предпочитаю писать свой собственный SQL. Но почти все проекты, в которые я вхожу, предпочитают использовать ORM. Та система с 40 миллионами транзакций в день, о которой вы упомянули, на какой платформе она работала? 16.12.2008
  • База данных Oracle 10g объемом 8 ТБ в SAN, Sun Solaris 10 на сервере SunFire среднего уровня с 4 ГБ ОЗУ, доступ к Java 1.6 через веб-службу на JBoss и WebLogic 10 17.12.2008
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]