Имеется javaee-приложение. В качестве БД используется монго. Для доступа к монго есть singleton-бин. В приложении нужно оперировать некими сущности. Допустим, есть сущности User и Bid (заявка). Все типы сущностей имеют схему (хранится в БД) и ещё некоторые общие поля. Конкретные типы имеют также свои уникальные поля. В самой программе эти сущности не представлены в виде DTO или чего-то подобного, т.е. не имеют отображения на конкретный класс (ввиду непостоянства их полей) информация хранится в обычных экземплярах org.bson.Document (Это новый класс, появился в 3-й версии драйвера для явы. На деле он имплементит Map<String, Object> и ещё что-то. Короче, с точки зрения доступа к инфе можно считать, что это обычная Map).
Как правильнее, с точки зрения концепции javaee организовать архитектуру?
Нужно создать некую абстракцию для этих сущностей, чтобы можно было удобно работать с ними. Хочется, чтобы это выглядело так:
public void editUser(Document doc) {
user.init(doc);
user.save();
}
public interface AbstractDoc {
public Document getSchema();
public void updateSchema(Document schema);
public void init(Document data);
public <T> T getField(String name, Class<T> fieldType);
}
public interface User {
public void register();
public List<Bid> getBids();
}
public interface Bid {
public User getUser();
}