2011-03-28 5 views
2

가설 적으로 Person이라는 도메인 개체가 있다고 가정 해 봅시다. 여기에는 다음과 같습니다 나는 또한 기본 CRUD 및 다른 설탕 방법을 정의하는 MemberRepository 인터페이스가도메인 객체에 불필요한 주석을 추가하지 않고 Morphia를 사용하여 도메인 객체를 유지하기위한 전략?

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; 
    } 
} 

.

이제 Morphia를 사용하여 MongoDB 인스턴스에서이 도메인 개체를 유지하려고한다고 가정 해 보겠습니다. 내 MorphiaMemberRepository 구현을 만들었지 만 확실치 않은 점은 가능한 한 작은 혼란으로 도메인 객체를 저장하는 방법입니다.

Morphia 사용자는 ObjectId 유형의 ID 입력란을 만들고 @Id이라고 주석을 달아야한다는 것을 알고 있습니다. 또한 @Entity("members") 클래스에 주석을 추가해야합니다. Morphia/MongoDB 관련 특수 효과를 사용하여 멋진 도메인 객체를 어수선하게 정리하고 싶지는 않습니다.

이렇게 ... 동료 스태커들,이 구현을 가능한 한 깨끗하게 유지하려면 어떻게해야합니까?

답변

0

IMember가 있다고 가정하면 Member implements IMember입니다. Getter 메소드는 IMember에 정의되어 있습니다.

다른 클래스 MorphiaMember implements IMember에는 필요에 따라 주석이 달리고 ID 필드 (ID는 항상 ObjectId는 아님)가 있습니다.

MemberRepository repo = ... 
Member m = Member.from(repo.get(some_id)) 
... 
Member m2 = ... 
repo.save(MorphiaMember.from(m)) 
: 각 클래스는

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

전형적인 워크 플로우가 될 것 팩토리 메소드가 있습니다

1

Morphia (최소한 @Id)에 대한 요구 사항입니다. 주석은 객체 또는 직렬화를 사용하는 방식을 변경하지 않아도됩니다. 그것들은 대부분의 프로그램이 무시하는 단지 여분의 메타 데이터입니다. 그들은 무해하다.

고유 필드가있는 경우 새 필드를 추가 할 필요가 없습니다. @Id로 표시하고 완료하십시오.

정말로이 작업을 수행하고 싶지 않으면 클래스를 처리하기 위해 morphia로 수동으로 메타 데이터를 만들 수 있지만 외부 구성 형식을 통해 해당 프로세스가 공개되지는 않으므로 훨씬 더 많은 작업이 수행됩니다.

관련 문제