Я разрабатываю архитектуру ODM на Java. У меня есть иерархическая структура с абстрактным классом Document верхнего уровня. Реализации объектов БД расширят этот класс.
public abstract class Document {
ObjectId id;
String db;
String collection;
}
public class Student extends Document {
db = "School";
collection = "Student";
String name;
int age;
float gpa;
}
Я хочу, чтобы каждый класс мог статически извлекать результаты для связанной с ним коллекции. Например, я хотел бы сделать что-то вроде Students.get(Students.class, new ObjectId(12345)), которое вернуло бы Student из базы данных. Обратите внимание, что мне нужно указать класс в методе get(), это ограничение библиотеки сопоставления объектов, которую я использую (Morphia).
Каков наилучший способ заставить каждый класс иметь этот метод get()? Есть пара ограничений:
get()должен быть реализован как статический метод- Я хотел бы по возможности избежать избыточного кода и не указывать класс для каждой реализации
get(). Например, если у меня есть классыStudentиTeacher, я хочу избежать указанияStudents.classиTeacher.classвручную. Я не уверен, что это возможно, посколькуget()является статическим методом.
Я думаю, что это разновидность распространенной абстрактной статической проблемы Java, но сначала я хочу убедиться, что подхожу к ней правильно.