Стратегия использования Morphia для сохранения объектов домена без добавления ненужных аннотаций к объектам домена? - PullRequest
3 голосов
/ 29 марта 2011

Гипотетически, допустим, у меня есть объект домена с именем Person. Это выглядит так:

public class Member {

    private final String firstName;
    private final String lastName;
    private final String email;
    private final String password;

    public Member(String firstName, String lastName, String email, String password) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
        this.password = password;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public String getEmail() {
        return email;
    }

    public String getPassword() {
        return password;
    }
}

У меня также есть интерфейс MemberRepository, который определяет базовый CRUD и некоторые другие сладкие методы.

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

Любой пользователь Morphia знает, что мне нужно создать поле идентификатора типа ObjectId и добавить к нему аннотацию @Id. Кроме того, мне нужно пометить класс @Entity("members"). Я не хочу загромождать мой красивый доменный объект специальными аннотациями Morphia / MongoDB.

Итак ... коллеги-укладчики, что я должен сделать, чтобы сохранить эту реализацию как можно более чистой?

Ответы [ 2 ]

1 голос
/ 29 марта 2011

Это требование для Morphia (по крайней мере, @Id).Аннотации не требуют изменения способа использования вашего объекта или сериализации.Это просто дополнительные метаданные, которые большинство программ игнорируют;они безвредны.

Если у вас есть уникальное поле, вам не нужно добавлять новые, просто пометьте это @Id и покончите с этим.

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

0 голосов
/ 30 марта 2011

Предположим, есть IMember, поэтому Member implements IMember. Методы получения определены в IMember.

Другой класс MorphiaMember implements IMember помечается как необходимый и имеет поле идентификатора (идентификатор не всегда ObjectId). У каждого класса есть фабричный метод

public static Member from(IMember mi) { ... }

поэтому типичный рабочий процесс будет:

MemberRepository repo = ...
Member m = Member.from(repo.get(some_id))
...
Member m2 = ...
repo.save(MorphiaMember.from(m))
...