Хорошие возможности для ORM - PullRequest
5 голосов
/ 08 сентября 2008

В настоящее время я работаю над созданием довольно простого инструмента ORM, который будет служить основой для различных веб-проектов для клиента. Большинство проектов являются внутренними и не требуют большого количества параллелизма, и все они будут идти против SQL Server. Я предложил им использовать инструменты ORM, такие как SubSonic, NHibernate и ряд других проектов с открытым исходным кодом, но по причинам удобства и гибкости они хотят создать что-то свое. Поэтому мой вопрос заключается в следующем: какие функции я должен обязательно включить в этот инструмент ORM? Кстати, я буду использовать MyGeneration для создания шаблонов генерации кода.

Ответы [ 10 ]

23 голосов
/ 08 сентября 2008

Ради любви ко всему святому (и женщинам, и детям) сделайте все возможное, чтобы убедить их не использовать нестандартное решение O / RM. Почему люди хотят заново изобрести колесо, когда уже существуют совершенно хорошие колеса с открытым исходным кодом?!?!

5 голосов
/ 15 сентября 2009

Если ваш клиент не интересуется OSS из-за (реального или воображаемого) восприятия поддержки, рассматривали ли вы какие-либо высококачественные коммерческие сторонние ORM, такие как LightSpeed ​​, который поставляется с хорошим дизайнерским инструментом GUI

LightSpeed ORM
(источник: mindscape.co.nz )

Mindscape (компания, которая продает LightSpeed) - новозеландская компания, расположенная недалеко от того места, где я живу, я встречал там некоторых разработчиков и знаю, что они славятся невероятной поддержкой клиентов. И они дают вам исходный код, когда вы покупаете программное обеспечение, так что вы можете настроить его так, как вам нравится.

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

3 голосов
/ 03 октября 2008

IMO, пишущий свой собственный OR / M, является одним из худших дизайнерских решений, которые вы когда-либо могли принимать. «ремонтопригодность и гибкость» - это именно те причины, по которым НЕ нужно писать свой ИЛИ / М.

Пожалуйста, прочитайте См. 25 причин, чтобы не писать свой собственный объект реляционного картографа , и посмотрите, действительно ли ваш клиент хочет заплатить, сколько стоит, чтобы построить что-то вроде NHibernate (7,6 млн долларов) или SubSonic (1,5 миллиона долларов). Потому что, как сказал ЧанЧан выше, у вас получится нечто подобное.

2 голосов
/ 15 сентября 2009

Есть куча сообщений от Дэви Брайона (коммиттер NHibernate), который по какой-то причине также вынужден написать собственный ORM для клиента.

Некоторые вещи, которые он покрывает:

  • Отображение классов в таблицы
  • Функциональность CRUD "из коробки"
  • Увлажняющие лица
  • Кэш уровня сеанса
  • Выполнение пользовательских запросов

Определенно стоит проверить, если вы ДОЛЖНЫ пойти по этому пути: Создайте свой собственный уровень доступа к данным

1 голос
/ 15 сентября 2009
  • Кэш второго уровня

    Позволяет поддерживать экземпляры сущностей в памяти

    • Автоматическая проверка грязи

      Позволяет обновлять изменения в объекте, не загружая его.

    • Мощный язык запросов

    • Мощный каскадный режим

    • Мощная стратегия генерации первичного ключа

      Платформа ORM подберет лучшую стратегию генерации первичного ключа в соответствии с целевой базой данных

    • Поддержка композитных элементов

    • Поддержка событий

      onSave, onUpdate и т. Д.

    • Хорошая документация и справочники

    • Поддержка разговорного состояния

С уважением,

1 голос
/ 01 января 2009

Может быть, просто может быть, вам очень нужны некоторые «функции», которые еще не существуют в существующих решениях. Может быть, вам нужно что-то более простое тоже. 1,5 доллара за Subsonic просто возмутительно. Может быть, вы хотите использовать POCO. Может быть, вы хотите легко использовать материал в трехуровневом сценарии. Возможно, вы не хотите поддерживать ВСЕ СУБД на планете, поэтому вы можете жестко и оптимизировать код только для своей цели. Может быть, вы хотите реализовать более интеллектуальное отслеживание объектов. Возможно, некоторые дизайнерские решения, принятые существующими правилами, сводят вас с ума ....

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

1 голос
/ 08 сентября 2008

По моему опыту, вам нужно использовать стиль nHibernate, чтобы у вас была какая-то карта между вашими объектами и базой данных. Это позволяет вашим объектам иметь некоторые вещи, которые трудно представить в базе данных, но которые легче представить в POCO.

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

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

КСТАТИ: я сделал то, что вы делаете, и я закончил с чем-то очень похожим на дозвуковой, и теперь советую своим клиентам взять дозвуковой источник и раскошелиться для себя.

0 голосов
/ 18 октября 2010

Попробуйте использовать Devart LinqConnect - все функции LINQ to SQL и широкая поддержка самых популярных серверов баз данных - Oracle, MySQL, Postgre, SQL Server и SQLite. Невероятный инструмент визуального моделирования, усовершенствованный инструмент мониторинга, высококачественная поддержка - в результате я выучил его всего за три недели во время выполнения моего проекта.

0 голосов
/ 15 сентября 2009

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

Если они хотят построить и продать ИЛИ / М. Поезжайте в город, делая один. Если они хотят что-то еще, используйте тот, который уже существует, чтобы выполнить работу.

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

0 голосов
/ 15 сентября 2009

Никто еще не упомянул об этом; но идти с LLBLGen . Вы можете настроить шаблон так, как вам нравится, и вы также можете, очевидно, написать свой собственный код в сгенерированных классах. Купи это. Вы никогда не будете оглядываться назад, и вы будете говорить: «Спасибо, шелковистый!» когда это последовательно работает красиво. (Я не писал это, но я люблю это). Если это не сработает для вас, вы также можете сказать: «Черт бы тебя побрал!». Но это маловероятно, однако я предлагаю его в качестве опции.

Единственная плохая вещь, которую я заметил в LLBLGen, - это поддержка переключения между базами данных / серверами на лету. Это не поддерживает функцию, которую я хотел бы; а именно способность обнаруживать, что заданная вами сущность не «существует» в новой базе данных, на которую вы переключились. Но это редкий случай.

Я предлагаю LLBLGen, потому что я находился в процессе написания своего собственного OR / M, когда натолкнулся на него. Никогда не оглядывался назад.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...