Должен ли я использовать "extends" в Java POJO для извлечения общего атрибута? - PullRequest
0 голосов
/ 21 декабря 2018

Я использую SQLite ORM на Android для сохранения и запроса данных.

У меня есть несколько POJO для ORM, которые имеют несколько таких же атрибутов, как "timestamp" среди этих POJOS.

Итакя должен извлечь эти общие атрибуты в базовый класс, чтобы не позволил другим соавторам забыть использовать эти атрибуты ?Например,

class BaseEvent {
    String activityName;
    //activityName getter and setter
}

class TouchEvent extends BaseEvent {
    int x;
    int y;
    //x and y's getter and setter
    public TouchEvent(int x,int y,String activityName){...}
}

class AccelerationEvent extends BaseEvent {
    float x,y,z;
    public AccelerationEvent (float x,float y,float z,String activityName){...}
}

Игнорирование определенного ORM (Realm.io), это хорошая практика в шаблоне проектирования?

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

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

Вы можете обратиться к ссылкам ниже, чтобы узнать, как это делается в спящем режиме

http://www.devsniper.com/base-entity-class-in-jpa/

https://vladmihalcea.com/how-to-inherit-properties-from-a-base-class-entity-using-mappedsuperclass-with-jpa-and-hibernate/

0 голосов
/ 21 декабря 2018

Рассматривая этот выпуск с 2015 года, мы видим, что у Царства есть проблемы с истинным полиморфизмом.

Наследование в Realm в настоящий момент дает вам:

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

Поэтому, когда вы работаете с Realm, настоятельно рекомендуется использовать composition over inheritance.

EDIT

Перепишем ваш пример, используя композицию:

interface BaseEvent {}

class TouchEvent implements BaseEvent {}

class AccelerationEvent implements BaseEvent {}

class SomeOfYourClass{
    BaseEvent event;
}
...