Все здесь прыгают на универсале ORM?

Третий подход, основанный на ответе Франнеско. Нарисуйте строку-заполнитель с альфа = 0 (прозрачным).

#draw your actual lines here
#plt....

lines, labels = plt.gca().get_legend_handles_labels()

lines.insert(1, plt.Line2D([],[], alpha=0))
labels.insert(1,'')

plt.legend(lines,labels,ncol=2)
plt.show()

Это имеет те же преимущества, что и в его ответе. Однако это решение не работает в matplotlib 1.5.1 (под python3), говоря ValueError: Unrecognized marker style none

13
задан Ahmad 17 December 2008 в 18:28
поделиться

18 ответов

Я записал уровни доступа к данным, компоненты персистентности и даже мой собственный ORMs в сотнях приложений за эти годы (одно из моих "хобби"); я даже реализовал свой менеджер транзакций собственного дела (обсужденный в другом месте на ТАК).

инструменты ORM были вокруг в течение долгого времени на других платформах, таких как Java, Python, и т.д. Кажется, что существует новый популярный товар теперь, когда центральные Microsoft команды обнаружили их. В целом, я думаю, что это - хорошая вещь - необходимый шаг в поездке, чтобы исследовать и постигать понятие архитектуры и дизайна, который, кажется, был представлен наряду с прибытием.NET.

Нижняя строка: Я всегда предпочитал бы делать свой собственный доступ к данным, а не бороться с некоторым инструментом, который пытается "помочь" мне. Никогда не приемлемо бросить мое управление моей судьбой, и доступ к данным является критической частью судьбы моего приложения. Некоторые простые принципы делают доступ к данным очень управляемым.

Использование фундаментальные понятия модульного принципа, абстракции и инкапсуляции - поэтому переносят доступ основных данных Вашей платформы API (например, ADO.NET) с Вашим собственным слоем, который повышает уровень абстракции ближе до Вашего пространства задач. НЕ кодируйте весь свой доступ к данным НЕПОСРЕДСТВЕННО против того, что API (также обсудил в другом месте на ТАК).

Сильно применяются, DRY (не Повторяйте Себя), принцип = осуществляет рефакторинг дневные светы из Вашего кода доступа к данным. Используйте генерацию кода в надлежащих случаях в качестве средства рефакторинга, но стремитесь избавить от необходимости генерацию кода каждый раз, когда Вы можете. Обычно генерация кода показывает, что что-то отсутствует в Вашей среде - дефицит языка, разработанный - в ограничении инструмента, и т.д.

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

Наконец, имейте в виду, что любое приложение/система, которое становится успешным, вырастет для обнаружения с проблемами производительности. Решение проблем производительности полагается больше на разработку их вместо того, чтобы просто "настроить" что-то в реализации. Та дизайнерская работа будет влиять на базу данных и приложение, которое должно измениться в синхронизации. Поэтому стремитесь смочь делать такие изменения легко (гибкими), а не попытаться избежать постоянно меняющийся само приложение. Частично, это в конечном счете означает способность развернуть изменения без времени простоя. Не трудно сделать, если Вы не "разрабатываете" далеко от него.

17
ответ дан Rob Williams 18 December 2008 в 04:28
поделиться

Я на самом деле работаю над записью инструмента ORM в.NET как параллельный проект развлечь меня.

SQL мертв мне. Я очень не хочу писать это, особенно имея его в моем коде где угодно. Вручную запись выбирать/вставлять/обновлять/запросы на удаление для каждого объекта, пустая трата времени IMO. И даже не запускайте меня на обработке, АННУЛИРУЕТ ("где col_1 =?" по сравнению с, "где col_1 является пустым") при динамичной генерации запросов. Инструменты ORM могут обработать это для меня.

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

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

Хранение логики запроса сторона DB (обычно как представление или хранимая процедура) также имеет преимущество в наличии того, чтобы быть для DBAs для настройки. Это было постоянным сражением в моем последнем задании, использование В спящем режиме. DBAs: "дайте нам все возможные запросы, таким образом, мы можем настроить" Devs: "мм, я не знаю, потому что В спящем режиме, генерирует их на лету. Я могу дать Вам некоторый HQL и отображение XML хотя!" DBAs: "Не заставляйте меня перфорировать Вас в поверхность!"

0
ответ дан CodingWithSpike 18 December 2008 в 04:28
поделиться
  • 1
    Кто-либо может подтвердить, что эта часть ответа работает на Вас? > > " Включение " Сделайте проект automatically" позволяет Вам, пропускают " Make" задача перед запуском " приложения Android; < < я переключился на " Используйте внешний build" и " Сделайте проект automatically" но AFAIU, если Вы удаляете " Make" прежде развертываются, Ваши классы won' t получают dex-редактора вообще. И это - то, что происходит со мной, старый apk (один без изменений) развертывается и запустился. Попробованный и ИДЕЯ 12 и 13 EAP. – Oleksandr Yefremov 12 September 2013 в 20:46

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

В особенности с отражением .NET, я не вижу потребности в генерале кода в целях ORM.

0
ответ дан Jeff Kotula 18 December 2008 в 04:28
поделиться
  • 1
    " Сделайте проект automatically" кажется, ничего не делает с Studio Android 0.1.8 +. Вы получили эту работу последнего выпуска? – goncalossilva 2 July 2013 в 19:44

Мы все еще используем скрученный вручную, повторяющийся cut'n'paste DAL, где я работаю. Это чрезвычайно болезненно, сложно, и подвержено ошибкам, но это - что-то, что все разработчики могут понять. Хотя это работает на нас в данный момент, я не рекомендую это, поскольку это начинает ломаться быстро на крупных проектах. Если бы кто-то не хочет переходить к полноценному ORM, я, по крайней мере, защитил бы своего рода поколение DAL.

0
ответ дан Daniel Auger 18 December 2008 в 04:28
поделиться
  • 1
    Я могу подтвердить что один can' t просто удаляют ' Make' шаг от выполненной конфигурации. Похоже, что старый APK выполняется, и новые изменения не отражаются. Я нахожусь на ИДЕЕ IntelliJ 13.0.1. – Andrey Chernih 8 January 2014 в 18:06
0
ответ дан Tim Scott 18 December 2008 в 04:28
поделиться
  • 1
    Это - правильный ответ на вопрос OP. Drammatically уменьшил время компиляции для моего проекта. – CrAsHeR 13 June 2013 в 22:55

еще, все еще скептически настроенный; как большинство продуктов Microsoft, я ожидаю SP2 или полтора года прежде, чем доверять им производственной среде

и отмечаю, что в значительной степени каждая новая вещь, представленная любым, не только Microsoft, провозглашена, поскольку "легкий вес, быстрый и легкий" - берет его с блоком соли. Они не рекламируют проблемы/проблемы вполне так же громко как преимущества/функции! Вот почему мы ожидаем ранних последователей для обнаружения их.

Это не должно осуждать ORM или LINQ или что-либо как этот; я резервирую решение до

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

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

0
ответ дан Steven A. Lowe 18 December 2008 в 04:28
поделиться
  • 1
    То, что Вы говорите, имеет много смысла, я вижу то же самое: очень медленная фаза DEXing, которая была просто в порядке в том же проекте в Eclipse. Возможно, необходимо сообщить об этой ошибке к JetBrains со всеми этими хорошими графиками и исследованиями:) – dimsuz 21 November 2013 в 08:23

, Если codesmith генерирует код на основе Ваших таблиц, не Вы все еще сильно связанный к Вашей схеме данных? Я предпочел бы решение, которое отделяет мои объекты из моей схемы базы данных для гибкости гумуса в архитектуре

, Это из одного из Ваших комментариев - Это верно, CodeSmith сильно связывает Вас к Вашим таблицам.

NHibernate, с другой стороны, имеет, выделяют функций, которые могут помочь с этим: у Вас есть Компоненты так, чтобы в коде Вы могли иметь: Человек со свойством Address, где Адрес является отдельным классом.

Вы также наследование, отображающееся . Таким образом, это делает справедливое задание отделения Вашей схемы от Вашего домена.

0
ответ дан sirrocco 18 December 2008 в 04:28
поделиться
  • 1
    Примечание: Результаты IntelliJ, вероятно, не допустимы для Studio Android, который использует различную систему сборки. – Nilzor 16 May 2013 в 20:11

Я следовал Быстрый-NHibernate очень тесно, поскольку это имеет некоторые самые потенциальные, которые я когда-либо видел в проекте.

0
ответ дан Chris Marisic 18 December 2008 в 04:28
поделиться

Я - большой поклонник также, с помощью EF и Linq-SQL. Мои причины:

, Так как LINQ компилируется и безопасен с точки зрения типов, Вы не получаете проблемы опечаток в "основанном на операция со строками" SQL. Я не знаю, сколько часов я потратил своей жизни, разыскивающей ошибку в SP или другом SQL, где "галочка" или некоторое другое ключевое слово были в неправильном месте.

Вышеупомянутое и другие факторы делают разработку быстрее.

, Хотя, конечно, существует издержки по сравнению с "ближе к металлическим" методам запросов базы данных, ни один из нас не использовал бы.NET вообще или даже C++, если бы производительность была нашим беспокойством № 1. Для большинство приложения, я смог получить превосходную производительность от Linq-SQL, даже не используя сохраненный подход proc (основанные на клиенте скомпилированные запросы мой обычный подход).

, Конечно, для некоторых приложений Вы все еще хотите сделать вещи старомодный путь все же.

1
ответ дан Sam Schutte 18 December 2008 в 04:28
поделиться
  • 1
    Я don' t знал об этой цели в C++. Существует другая цель для программистов C; C программисты делают это для предотвращения предупреждений компилятора, таких как " неиспользованный возврат value". – Jack 20 December 2012 в 03:53

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

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

я переключился на LINQ и никогда не оглядывался назад. DBLinq является потрясающим для того, чтобы сделать другую базу данных, чем MSSQL. Я использовал его со СВОИМ SQL, и это является БОЛЬШИМ.

0
ответ дан David Basarab 18 December 2008 в 04:28
поделиться
  • 1
    +1 (и я желаю, чтобы я заплатил бы больше, чем это). из всех ответов I' ve, замеченный в этом сообщении, это - польза функциональный причина того, чтобы сделать это. Это на самом деле средства что-то помимо " ничто для наблюдения here" и " закрытый, глупый compiler" как другие ответы, кажется, заточены на. Спасибо за это. – WhozCraig 20 December 2012 в 02:16

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

Так нет.

2
ответ дан Ian Boyd 18 December 2008 в 04:28
поделиться
  • 1
    Обратите внимание на это, если функция была объявлена этим путем, то, вероятно, на серьезном основании. Таким образом, необходимо добавить проверку на возвращаемое значение вместо того, чтобы очевидно игнорировать его. – datenwolf 20 December 2012 в 01:33

Это не побеждающая сторона для вскакивания, реакция на настоящую проблему! Объектное реляционное отображение (ORM) было вокруг в течение долгого времени, и оно решает настоящую проблему.

Исходный объект, Ориентированный (OO), языки были всеми о моделировании проблем реального мира с помощью языка программирования. Можно было утверждать, что при реальном использовании языка OO для систем сборки, Вы будете моделировать проблемную область реального мира с помощью Доменного управляемого дизайна (DDD). Это логически берет Вас к разделению модели проблем для содержания DDD в чистоте и ясный из всей помехи персистентности данных и управления приложениями.

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

ORM является старой проблемой и был несколько решенных годы назад продуктами как Объектная Линза и Главная Ссылка. Объектной Линзой был Smalltalk ORM, созданный ParkPlace в 90-х. Главная Ссылка была создана Объектными Людьми для Smalltalk, затем преобразовала для Java и в настоящее время используется Oracle. Главная Ссылка также была вокруг с 90-х. Защитники DDD теперь начинают ясно ясно формулировать случай для DDD и получают долю ума. Поэтому ORM, при необходимости, становится господствующей тенденцией, и Microsoft просто реагирует, как обычно.

6
ответ дан daduffer 18 December 2008 в 04:28
поделиться

Я с нетерпением жду дня, моя команда начинает изучать решения ORM. До того дня мы - чистый магазин Набора данных/Хранимой процедуры и позволяем мне сказать Вам, что это не все булочки и соус, являющийся "чистым".

Во-первых, новый Linq к SQL работает близко к тому из сохраненных procs и средств чтения данных. Мы используем наборы данных везде, таким образом, производительность улучшилась бы. Пока неплохо для ORM.

, Во-вторых, сохраненные procs обладают дополнительным преимуществом того, чтобы быть выпущенным отдельный из кода, но у них также есть вред того, чтобы быть выпущенным отдельный из кода. Притворитесь в течение секунды, что у Вас есть база данных больше чем с 5 системами, соединяющимися с ним и больше чем 10 людьми, работающими над ним. Теперь думайте об управлении всеми теми изменениями хранимой процедуры и зависимостями, особенно когда будет общая кодовая база. Это - кошмар...

В-третьих, трудно отладить сохраненный procs. Они часто приводят к ошибочному поведению для всевозможных причин. Это не должно говорить, что то же не могло никакой результат динамического sql быть сгенерированным ORM, но один, меньшей проблемой является та меньше проблемы. Никакие проблемы полномочий (хотя главным образом разрешено в SQL 2005), больше никакой многоступенчатой разработки. Запись запроса, тестирование запроса, развертывание запроса, связь его в код, тестирование кода, развертывание кода. Запрос является частью кода, и я рассматриваю это как хорошую вещь.

Четвертый, Вы можете все еще используемые хранимые процедуры. Выполнение некоторых отчетов, которые занимают много времени? Сохраненные procs являются лучшим решением. Почему? Планы выполнения запросов могут быть оптимизированы механизмом базы данных. Я не симулирую понимать все работы базы данных, но я действительно знаю, что существуют некоторые ограничения к оптимизации динамического sql в настоящее время, и это - компромисс, который мы делаем при движении с ORM. Однако сохраненные procs не исключены при использовании решения ORM.

Действительно самая большая причина я вижу, что люди избегают, чтобы ORM был то, что у них просто нет опыта с одним. Будет очевидная кривая обучения и этап незнания. Однако, если это собирается улучшить производительность разработки и едва препятствовать (или в моем случае улучшаются), производительность. Это - компромисс, который стоит сделать.

2
ответ дан Ty. 18 December 2008 в 04:28
поделиться
  • 1
    Спасибо! я действительно думал, что будет более полезная причина использовать его. – const_ref 20 December 2012 в 01:33

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

Мой опыт состоит в том, что это может помочь Вам собрать версию подтверждения концепции быстро, но может представить требования рефакторинга, с которыми Вы не можете быть знакомы (по крайней мере все же.)

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

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

4
ответ дан dkretz 18 December 2008 в 04:28
поделиться
  • 1
    @datenwolf: Когда был прошлый раз, Вы проверили результат возврата printf?:-) – Kerrek SB 20 December 2012 в 01:45

Я был на поезде ORM в течение самого долгого времени, начиная с бесплатной версии LLBLGen к последнему и самому большому коммерческому продукту LLBLGen Pro. Я думаю, что ORMs вписываются очень хорошо для большого количества систем ввода-вывода общих данных.

, Который не должен говорить, что они решают все проблемы как бы то ни было. Это - инструмент, который может использоваться, где имеет смысл использоваться. Если Ваша схема базы данных является relativly близко к тому, как Ваши бизнес-объекты должны быть, ORMs являются лучшими.

6
ответ дан Bob 18 December 2008 в 04:28
поделиться
  • 1
    Как я думал, имеет смысл использовать его для пользы удобочитаемости так или иначе – const_ref 20 December 2012 в 01:34

Я предполагаю то, что я имел в виду, был, каковы инновации, которые ORMs обеспечивают по созданию Вашего DAL с помощью традиционного ADO.NET, SQL и отображая их на объекты в коде?

Вот три главных части моего DAL, и я соответствую ORMs для наблюдения преимуществ:

  1. у Вас все еще должен быть запрос в ORM = SQL (SQL более мощен безусловно)

  2. , Отображающийся код перемещается в конфигурацию, но все еще не устраненный, просто смещается от одной парадигмы до другого

  3. , Объекты должны определяться и управляться плотно relatedto Ваша Схема данных, в отличие от этого, в традиционном подходе, который я могу сохранить их отделенными.

я пропускающий что-то?

1
ответ дан Ahmad 18 December 2008 в 04:28
поделиться
  • 1
    Вводил хороший длинный ответ, и затем Вы пошли и отправили этого:) Хорошее сообщение, upvoted. – Graymatter 25 July 2012 в 08:27

Нет. Не все.

Вот слон большой задницы номер один в комнате с большинством инструментов ORM (особенно LINQ к SQL:

Вам гарантируют, то ЛЮБОЕ связанное с данными изменение потребует полного повторного развертывания Вашего приложения.

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

5
ответ дан NotMe 18 December 2008 в 04:28
поделиться
  • 1
    @KerrekSB He' s говорящий о функциях, объявленных с упомянутым атрибутом вместо обычно, функционирует объявленный с возвращаемым значением вообще, я думаю. И я надеюсь, что никакая разумная стандартная библиотека не объявляет printf с таким мусорным атрибутом. – Christian Rau 20 December 2012 в 01:49

Я - огромный защитник ORM. Генерация кода с ORM сохраняет мой магазин приблизительно 20-30% на большинстве наших проектов.

И мы действительно сокращаем разработку, таким образом, это - большая победа.

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

кроме того, Вы можете все еще полагаться на традиционный sprocs и даже просматриваете в надлежащих случаях... Мы не категорически 100%-й ORM, это наверняка.

12
ответ дан Brian MacKay 18 December 2008 в 04:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: