ORM Наследование - PullRequest
       10

ORM Наследование

11 голосов
/ 27 февраля 2009

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

Или ORM Inheritance - это концепция "пирога в небе"?

Ответы [ 4 ]

6 голосов
/ 27 февраля 2009

Я использовал наследование с Hibernate (а некоторые с Django) и очень сожалел об этом.

Принцип «композиция поверх наследования» особенно актуален для классов доменов. Хотя я согласен, что в нескольких случаях наследование имеет смысл на уровне модели, в большинстве случаев наследование даст вам очень статичную модель предметной области, в которой один объект не сможет перейти в другой класс.

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

И, наконец, есть некоторые технические проблемы, такие как прокси, созданные Hibernate, которые скрывают класс actall объекта. Это заставляет "экземпляр" вести себя странно. Конечно, вы можете сказать, что «instance of» - это запах кода и, возможно, это еще один намек на то, что композиция, вероятно, является лучшим решением ...

5 голосов
/ 27 февраля 2009

Мне очень нравится этот вопрос. Я использовал инструменты ORM (Toplink, теперь eclipselink, Hibernate) некоторое время, и я всегда видел это как упоминание в документах JPA, но у меня никогда не было потребности в этом. По сути, моя философия заключается в том, что ORM не позволяет вам писать код Tedius для извлечения записей для базы данных. Это действительно огромная экономия времени, и она не позволяет вам делать глупые ошибки. Конечно, вы можете сделать что-то необычное с этим, но почему бы не сохранить его для контроллера (если вы следуете MVC), чем вставить его в модель?

3 голосов
/ 27 февраля 2009

Если вы имеете в виду наследование в классах домена, я все время использую его с NHibernate и / или Castle ActiveRecord, они поддерживают три стратегии отображения:

1 голос
/ 03 февраля 2016

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

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

С наследованием вы бы сделали что-то вроде этого:

@Entity
@Inheritance
public abstract class Party {

  @Id
  private Long id;

  ...
}

@Entity
public class Individual extends Party {
  ...
}

@Entity
public class Organization extends Party {
  ...
}

@Entity
public class SalesOrder {

  private Party buyer;

  ...
}

Тогда вы можете сделать:

salesOrder.setBuyer(someOrganization) или salesOrder.setBuyer(someIndividual)

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