2011-02-25 5 views
1

ORM 모델을 http와 tcp 전송을 통해 애플리케이션간에 전달해야하는 경우 ORM 모델을 처리하는 방법에 대한 일반적인 질문입니다. 특히 성 활동 레코드를 통해 NHibernate를 사용하고 있습니다. 어떤 차이가 있습니다. 전송을 통한 데이터 형식은 JSON 일 수도 있고 XML 일 수도 있습니다. XML/JSON 직렬화시http/tcp 전송을 통한 ORM 모델 클래스 전송

  1. 순환 참조 오류 :

    내가 전송을 통해 ORM 모델을 통과하는 경우에 실행하는 세 가지 문제가 있습니다. 이러한 오류는 관계 속성에 ScriptIgnore 및 XmlIgnore 특성을 사용하여 해결할 수 있지만 무시할 수있는 관련 개체를 포함하기를 원하기 때문에 훌륭한 솔루션은 아니며 무시 특성을 제거하면 순환 참조 오류가 발생할 수 있습니다.

  2. 직렬화시 지연로드. 클래스 B와 1 : 1의 관계를 갖는 클래스 A를 가지고 있다고 가정 해 봅니다. 클래스 A를 직렬화하면 클래스 B를 가져 와서 직렬화하기 위해 db를 호출하려고 시도합니다. 때때로 더 이상 지연 세션을 허용하지 않는 적절한 세션에 있습니다 직렬화 시점에서 오류가 발생합니다. 이것은 무시 속성으로도 해결할 수 있지만 같은 이유로 좋은 해결책은 아닙니다.

  3. ORM 모델의 기본 클래스는 XML과 직렬화 할 수 없지만 봉인됩니다. 나는 이것에 대한 해결책을 모른다. 그러나 나는 여러 번 그것에 뛰어 들었다. 문제에

하나 개의 솔루션은 위의 다시 ORM 모델을 통과하지 않는 것입니다 앞뒤에서 전혀 전송, 나는 많은 것을 권장 솔루션입니다 말을 들었습니다. 그러나 어떻게 이것을 깨끗한 방법으로합니까? 일종의 전송을 사용하여 한 앱에서 다른 앱으로 전달하려는 ModelA가 있다고 가정 해 보겠습니다.

  1. 당신은 ORM의 모든 속성, 기본 클래스 및 지연로드 기능없이 제외 MODELA의 모든 속성을 가진 ModelAView 클래스를 만들 수 있습니다. 이미 동일한 중복 속성을 가진 2 개의 클래스가 있으므로 솔루션은 깨끗하지 않습니다. 모델을 변경하려면 두 클래스에서 모두 변경해야합니다.

  2. 데이터베이스에서 ModelA 인스턴스를 가져 와서 ModelAView의 속성을 필드별로 채워야합니다. ModelA 인스턴스를 전달하는 ModelAView의 생성자를 가지고 거기에 속성을 설정하여 좀 더 깨끗하게 만들 수 있습니다. 그러나 값 속성을 속성별로 설정해야하는 번거 로움이 있습니다. 일종의 복제 기능을 시도 할 수 있습니다. 그러나 하위 개체가있는 경우에는 복제가 필요하며보기를 수행하는 좋은 방법이없는 것 같습니다. 특히 View 클래스가 반드시 모든 개체를 가질 필요는 없기 때문입니다. ModelA 클래스가 수행하는 것과 동일한 특성을가집니다.

  3. 전송을 통해 ModelAView를 다른 앱에 전달합니다.

  4. 다른 앱에서는 ModelAView를 사용하여 필요한 작업을 수행 할 수 있습니다. 그러나 ModelA의 속성을 업데이트하고 db에 저장해야하는 경우에는 반대쪽에서 ModelAView의 모든 속성을 ModelA에 복사 한 다음 db에 저장해야합니다.

많은 글을 작성 했으므로 이러한 상황에서 ORM 모델을 다루는 데 어려움을 겪었기를 바랍니다.누구든지 코드 복제 및/또는 한 객체에서 다른 객체로 값을 속성별로 복사하지 않아도되는 이러한 문제를 처리하기 위해 노력하고 참된 방법으로 공유 할 수있는 경험이 있습니까?

답변

4

나는 운이다고 생각합니다. 나는 많은 사람들이 가지고있는 같은 문제에 부 닥쳤다. 그리고 합의는 당신이 DTO (데이터 전송 객체)를 사용해야한다는 것 같다. AutoMapper하면 조금 쉬워집니다.

NH의 결과 변환기를 사용하여 결과를 DTO로 반환하는 경우 엔티티에서 DTO로 변환하는 번거 로움을 줄일 수 있습니다.

우리는 하나의 엔티티마다 서로 다른 DTO를 만들었습니다. 각 엔티티에는 서로 다른 하위 또는 컬렉션이 포함되어 있습니다. Customer, CustomerWithOrders 등 DTO가 필요한 클라이언트는 필요한 것을 미리 알아야만 올바른 종류를 요청할 수 있습니다.

우리 회사가 많이 변하지 않으므로 유지 관리가 그렇게 나쁘지 않았습니다.

관련 문제