Хорошие функции ORM

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

См. также: A хороший список лучших практик

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

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

5
задан Rob Cooper 8 September 2008 в 18:49
поделиться

9 ответов

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

23
ответ дан 18 December 2019 в 05:27
поделиться

Запись IMO Вашего собственного OR/M является одной худшие проектные решения, которые Вы могли когда-либо делать. "пригодность для обслуживания и гибкость" являются причинами точно для НЕ записи собственного OR/M.

Читайте, Видят 25 Оснований, чтобы Не Записать Ваш Собственный Объектный Реляционный Картопостроитель и видеть, хочет ли Ваш клиент действительно заплатить то, чего он стоит для создания чего-то как NHibernate ($7,6 миллионов) или SubSonic ($1,5 миллиона). Поскольку, как ChanChan сказал выше, Вы закончите с чем-то подобным этому.

3
ответ дан 18 December 2019 в 05:27
поделиться

Возможно, просто, возможно, Вам нужны плохо некоторые "функции", которые еще не существуют в существующих решениях. Возможно, Вам нужно что-то более простое также. 1,5$ для Дозвукового просто возмутительны. Возможно, Вы хотите использовать ПОСТЕПЕННО. Возможно, Вы хотите использовать материал легко в 3 сценариях уровня. Возможно, Вы не хотите поддерживать ВЕСЬ RDBMS на планете, таким образом, Вы можете hardcode и оптимизировать код только для Вашей цели. Возможно, Вы хотите реализовать более умное объектное отслеживание. Возможно, некоторые проектные решения, сделанные существующим orms, сводят Вас с ума....

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

1
ответ дан 18 December 2019 в 05:27
поделиться

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

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

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

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

1
ответ дан 18 December 2019 в 05:27
поделиться
  • Кэш второго уровня

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

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

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

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

    • Мощная каскадная операция

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

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

    • Поддержка для составных элементов

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

      onSave, onUpdate и т. д.

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

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

с уважением,

1
ответ дан 18 December 2019 в 05:27
поделиться

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

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

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

0
ответ дан 18 December 2019 в 05:27
поделиться

Your job as a consultant (sounds like that's what you are) is to leverage your expertise in implementing for your clients a solution that fits their desires with a minimum cost and time investment.

If they want to build and sell an OR/M. The go to town making one. If they want anything else, use one that already exists to get the job done.

If they insist on spending money, buy an existing one (I won't name any, but there exist some good ones that are not free).

0
ответ дан 18 December 2019 в 05:27
поделиться

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

Некоторые из вещей, которые он охватывает:

  • Сопоставление классов с таблицами
  • Готовая функциональность CRUD
  • Увлажнение сущностей
  • Кэш уровня сеанса
  • Выполнение пользовательских запросов

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

2
ответ дан 18 December 2019 в 05:27
поделиться

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

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

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

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

5
ответ дан 18 December 2019 в 05:27
поделиться
Другие вопросы по тегам:

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