У меня есть класс модели местоположения. У меня есть абстрактный класс Persister. У меня есть две реализации абстрактного класса: MySQLPersister и MongoDBPersister. Причина в том, что я могу переключаться между использованием MySQL или MongoDB, когда мне нужно. Обратите внимание, что я не использую оба одновременно. Просто для большей гибкости.
Проблема в том, что класс модели Location расширяет Model, MySQL должен будет импортировать play.db.jpa.Model. MongoDB будет импортировать play.modules.morphia.Model. Это становится проблемой, потому что каждый раз, когда я хочу переключиться, мне нужно не только изменить класс модели Location, но и изменить код в реализациях Persister из-за того, что две библиотеки имеют разные методы для модели.
Например, если я хочу перейти от использования JPA к Morphia, я должен закомментировать код в MySQLPersister. Model.find().fetch() возвращает Iterable в JPA, а Model.find().filter().asList() в Morphia даже не существует, когда я импортирую JPA.
Как мне преодолеть эту проблему? Я не хочу создавать общий класс модели и еще два идентичных класса моделей, которые импортируют каждую базу данных — это слишком много дублирования.
По сути, я нахожу дизайн play-morphia и play-jpa негибким:
JPA PlayMorphia
play.db.jpa.Model > play.modules.morphia.Model
javax.persistence.Entity > com.google.code.morphia.annotations.Entity
Было бы лучше, если бы и play.db.jpa.Model, и play.modules.morphia.Model были расширены из более обобщенного класса Model. Таким образом, мне не нужно менять модели, если я хочу реализовать обе базы данных.
Спасибо! Дайте мне знать, если мое объяснение непонятно.