RIA 서비스와 Silverlight 4에서 NHibernate를 사용하고 있습니다. 나는 Martin Fowler의 분산 법칙에 따라 도메인 계층 객체를 배포하는 대신 RIA 서비스를 통해 데이터를 전송하기위한 DTO를 만듭니다. 객체 디자인 : "객체를 배포하지 마십시오!"). DTO 개체는 도메인 계층의 5 개의 해당 계층에서 두 개의 계층으로 병합됩니다.RIA 서비스와 함께 NHibernate와 DTOs를 사용하는 방법
여기 내 문제가 있습니다. Silverlight 4에서 변경 한 후 RIA Services는 수정 된 DTO 개체를 알고 있지만 서버 측 업데이트 코드에서 변경 사항을 "실제"도메인 계층 개체로 다시 전송해야 NHibernate에서 이러한 변경 내용을 다시 데이터 베이스. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?
DTO는 가볍기 때문에 클라이언트 측에서 필요한 정보 만 포함하므로 분명히 이 아니며은 해당 도메인 객체를 DTO에 포함하려고합니다. 여기
내가 생각 한 그 가능성의 몇 가지 :1) DTO 객체 내에서 도메인 객체에 대한 참조를 누릅니다. 만 있으면 참조 된 전체 객체가 이 아닌이 아닌 일련의 참조가 직렬화되어 전송됩니다. 이는 합리적인 방법 일 수 있습니다. 물론 존재하지 않는 메모리 위치를 가리 키기 때문에 참조가 클라이언트 측에서 유효하지는 않지만 여행이 끝나면 서버 측에서 사용될 수 있습니다. (?)
2) 위와 같지만 도메인 집계 루트에 대한 참조 만 DTO 개체에 저장합니다. 그런 다음 객체 관계 탐색을 사용하여 다른 관련 도메인 객체를 가져옵니다.
3) 도메인 객체의 ID를 DTO에 저장하고 NHibernate의 "Get"by ID 또는 "Load"by ID 기능을 사용하여 올바른 도메인 객체를 검색하여 업데이트를 적용 할 수 있습니다.
4) 위와 동일하지만 집계 루트에 대해 "가져 오기"또는 "로드"만 사용하고 관련된 모든 개체에 대해 순회를 사용하십시오.
아마도 위의 어느 것도 적합하지 않고 더 나은 방법 ...
내가 ORM 위에 액세스 레이어를 만들 때마다
당신이 동시성 문제를 방지 할뿐만 아니라 버전 필드를 처리 할 수 있다는 것을 잊지 마십시오. – Sam
Jeremy and Sam, 팁 주셔서 감사합니다! – MylesRip