2010-08-19 1 views
0

내가 트랜잭션 마스터 세부 기록을 수행 할 필요가있는 상황에서 오전 (새 세부 사항을 드롭 이전 정보를 삽입, 업데이트 마스터 상태)트랜잭션 내에서 큰 비즈니스 개체의 1 개 필드 만 업데이트하는 가장 좋은 방법은 무엇입니까?

  1. 마스터 비즈니스 오브젝트는 20 개 필드
  2. 있다 세부 비즈니스 오브젝트 내가 만 1 필드를 업데이트하는 데에만

이제 4 개 필드가 마스터 테이블 및 4 개의 필드가 삽입됩니다.

새 마스터 객체를 초기화하면 간단한 업데이트를 위해 19 개의 필드가 낭비됩니다. 이 상황을 효율적으로 처리하려면 어떻게해야합니까?

새 오브젝트를 만들고 마스터 비즈니스 오브젝트에서 하나의 필드 만 상속 할 수 있습니까? DTO 나 상속을받는 사람에게 나에게 조언을 해주면 조금만 실례를 들어주세요. 감사.

답변

1

실제로 필드를 상속받을 수 없기 때문에 클래스를 상속 할 수 없으므로 상속하는 대신 네 개의 필드를 노출한다고 가정합니다.

더 작고 간단한 '업데이트 개체'를 만들 수 있지만이 작은 개체가 논리적으로 모델에 존재하는 경우에만 수행합니다. 이상적으로는 비즈니스 개체의 일부만 업데이트하기위한 특별한 개체를 만들고 싶지는 않습니다. 대신에, 당신의 영속성 레이어의 임무는 어떤 필드가 변경되었고 그에 따라 행동하는지 (즉, 오직 그 필드를 업데이트하는 것)에 충분히 똑똑 할 수 있어야합니다. 요약 그래서

:

  • 이 당신의 영속 계층에서 도메인 모델
  • 신뢰의 그것 또한 논리적 인 부분이 변경된 내용을 볼 수있는 경우에만 업데이트 개체를 확인합니다.
+0

답장을 보내 주셔서 감사합니다. 4 개의 필드를 가진 더 단순한 비즈니스 오브젝트를 만들 수 있지만 리던던시 (두 오브젝트 모두에 동일한 필드)가 생성됩니다. '모델에 논리적으로 존재 하는가?'라는 것은 무엇을 의미합니까? 마스터 자식 (child child)에서, 자식 (childs)이 업데이트 될 때마다 master에서 'last updated field'를 업데이트해야합니다. –

+0

이상적인 디자인 세계에서, 당신의 객체는 당신의 기술 요구 사항이 아닌 당신의 '실제'비즈니스 개념을 따라 모델링 될 것입니다. 이것은 물론 100 % 가능하지는 않습니다 (일부 지속성 계층에서는 일부 특성을 사용하여 비즈니스 오브젝트를 데 이터베이스에 저장하여 데이터베이스에 저장해야 함을 나타냄). 그럼에도 불구하고, 나는 '감소 된'객체를 사용하는 큰 팬이 아니다. 예를 들어 wcf 서비스와 같이 많은 직렬화를 수행하고 빈 필드를 모두 직렬화하면 성능에 영향을 미칠 수있는 예외가 될 수있다. . – Sam

+0

흠, 고마워 샘. 나는 결코 직렬화에 대해 생각해 본 적이 없지만 나의 경우에는 필요하지 않을 것이다. 내 대규모 비즈니스 객체를 작은 객체로 분해하고 필요할 때 조합을 반환하는 것이 좋습니다. 그건 내 일을 더 쉽게 해줄거야. –

0

이 4 개의 필드로 DTO를 작성하십시오. UI는 비즈니스 객체를 수정하기 위해 새로운 값을 사용할 비즈니스 계층에이 DTO를 보냅니다. 수정 된 비즈니스 객체를 유지하는 것보다.

+0

죄송합니다. 불편을 끼쳐 드려 죄송합니다. DTO가 업데이트를 위해 별도의 DB 레이어로 이동하지 않습니까? 또한 비즈니스 객체를 수정하면 무엇을 의미합니까? 이것을 DTO 내부로 가져 가면 모든 필드를 초기화한다는 의미이므로 마스터 비즈니스 객체를 망칠 필요가 없습니다. –

관련 문제