3

마스터 디테일 설정에서 엔티티 생성 및 편집을 처리하기 위해 사람들이 사용하는 전략이 궁금합니다. (우리의 응용 프로그램은 인터넷이 가능한 데스크탑 응용 프로그램입니다.)마스터 디테일에서 엔티티 생성/편집을 처리하는 방법

다음은 우리가 현재 처리하는 방법입니다. 편집해야하는 엔티티에 대한 팝업에서 양식이 생성되며이 개체의 사본을 제공합니다. 사용자가 "취소"버튼을 클릭하면 창을 닫고 객체를 완전히 무시합니다. 사용자가 "확인"버튼을 클릭하면 마스터보기에 알림이 보내지고 편집 된 엔티티가 수신됩니다. 그런 다음 originalEntity.copyFrom (modifiedEntity)을 사용하여 수정 된 엔터티의 속성을 원래 엔터티에 복사합니다. 새로운 엔티티를 생성하고자하는 경우, 빈 엔티티를 팝업에 전달합니다.이 엔티티는 사용자가 기존 엔티티 인 것처럼 편집 할 수 있습니다. 마스터보기는 수신하는 엔티티를 관리하는 콜렉션에 "삽입"또는 "갱신"할지 여부를 결정해야합니다.

나는 위의 워크 플로우에 대한 몇 가지 질문과 관찰이 : 엔티티의 사본의 생성을 처리해야

  • ? (마스터 또는 세부 사항)
  • 우리는 참조를 중단시킬 수있는 콜렉션의 엔티티를 대체해야하는 것을 방지하기 위해 copyFrom()을 사용합니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?
  • 새로운 엔티티는 -1의 ID (서버 계층/최대 절전 모드가 삽입 또는 업데이트를 구별하기 위해 사용)를 수신합니다. 이것은 id를 저장하기 전에 ID로 엔티티 (캐쉬 된)를 찾을 때 잠재적으로 문제를 일으킬 수 있습니다. 대신 새로운 엔티티마다 임시 고유 ID를 사용해야합니까?

누군가가 팁을 공유 할 수 있습니까? & 트릭이나 경험이 있습니까? 감사!

편집 : 나는이 질문에 대한 절대 잘못이나 정답이없는 알고, 그래서 나는 단지 그들이 마스터/세부 상황을 처리하는 방식에 대한 생각과 장점/단점을 공유하는 사람들을 찾고 있어요.

답변

1

이 방법을 변경하는 데는 여러 가지 방법이 있습니다. 실제로 어떤 솔루션도 실제로 "잘못"될 수는 없음을 명심하십시오. 그것은 모두 상황의 세부 사항에 달려 있습니다. 여기 고양이를 다듬는 한 가지 방법이 있습니다.

누가 엔티티 사본 생성을 처리해야합니까? (마스터 또는 디테일)

마스터는 지속 된 엔터티의 하위 집합의 메모리 내 목록으로 표시됩니다. 마스터가 목록의 변경 사항을 처리하도록 허용합니다. 목록 자체는 사용자 정의 모음 일 수 있습니다. ItemChanged 이벤트를 사용하여 항목이 업데이트되어 유지되어야한다는 알림을 마스터에 발생시킵니다. NewItem 이벤트를 발생시켜 마스터에게 삽입을 알립니다.

우리는 참조를 깨뜨릴 수있는 콜렉션의 엔티티를 대체해야하는 것을 방지하기 위해 copyFrom()을 사용합니다. 이 작업을 수행하는 더 좋은 방법이 있습니까? (copyFrom() 구현은 까다로울 수 있습니다)

copyFrom()을 사용하는 대신 세부 정보 팝업에 기존 참조를 전달합니다. enumerable 컬렉션을 사용하여 마스터 목록을 저장하는 경우 list [index]에서 반환 된 객체를 세부 정보 창에 전달할 수 있습니다. 참조 자체가 변경되므로 목록에서 Replace 메서드를 사용할 필요가 없습니다. 확인을 누르면 해당 ItemChanged 이벤트가 발생합니다. 업데이트 할 개체를 알 수 있도록 인덱스를 전달할 수도 있습니다.

새 엔티티는 -1의 ID (서버 계층/최대 절전 모드가 삽입 또는 업데이트를 구별하기 위해 사용)를 수신합니다. 이것은 id를 저장하기 전에 ID로 엔티티 (캐쉬 된)를 찾을 때 잠재적으로 문제를 일으킬 수 있습니다. 대신 새로운 엔티티마다 임시 고유 ID를 사용해야합니까?

변경 사항이 즉시 지속되지 않습니까? Hibernate Session with the Unit of Work pattern을 사용하여 삽입 대상과 업데이트 대상을 결정하십시오. Unit of Work의 예가 더 있습니다. Java가 많은 부분이 없다면 .NET 커뮤니티가 블로그 게시물을 체크 아웃해야 할 수도 있습니다. 개념은 어느 쪽의 방법이라도 같은 동물이다.

희망이 도움이됩니다.

+0

감사합니다. 편집 참조를 전달하는 문제는 엔터티의 원래 값을 저장하지 않고 변경 내용을 취소하거나 취소 할 수 없다는 것입니다. –

+0

나는 뭔가를 놓친 것 같아. 명확히하기 위해 마스터 목록에 dirty/clean과 같은 다른 주를 보유하고 있다고 말하고 있습니까? 세부 정보 창에서 마스터의 항목을 추가 및 편집하고 세부 정보 창에서 확인을 클릭 한 다음 마스터 창에서 일부 컨트롤을 사용하여 변경 내용을 커밋하거나 롤백해야합니까? –

+0

귀하의 데이터 개체가 귀하의 예제에서 명확하지 않은 방식으로 양식에 바인딩되어 있습니까? 나는 당신이 당신의 .set 메소드를 어디에 호출하는지 궁금 할 뿐이다. 나는 Kevin과 같은 라인을 생각하고있다. –

0

CSLA 라이브러리는 이러한 상황을 크게 도와줍니다.

그러나 자기 원한다면 구현 :

당신은 마스터 개체가이 마스터 개체는 하위 개체의 목록이 포함되어 있습니다.

세부 양식은 하위 개체를 직접 편집 할 수 있습니다. 모든 것이 참조 유형이므로 마스터 객체는 자동으로 업데이트됩니다.

문제는 마스터 객체가 더럽다는 것을 알고 있으므로 데이터베이스 나 기타 등등에 유지되어야합니다.

CSLA는 이것을 IsDirty() 속성으로 처리합니다. 마스터 객체에서 각 자식 객체를 질의하여 더러운 지 여부를 확인하고 모든 객체를 유지합니다 (마스터 객체 자체가 더러운 지 추적하는 것뿐만 아니라).

또한이 객체는 INotifyPropertyChanged 인터페이스로 처리 할 수 ​​있습니다.

는 다른 몇 가지 질문에 관해서는 :

당신은 당신의 논리를 구분합니다. 엔터티는 자체 속성의 저장소 및 자체에 대한 무결성 규칙을 처리 할 수 ​​있지만 서로 다른 개체가 상호 작용하는 방식에 대한 논리는 분리되어야합니다. MVC 또는 MVP와 같은 패턴을 조사하십시오.

이 경우 새 자식 개체는 마스터 개체에 있거나 자식을 만드는 별도의 비즈니스 논리 개체에 있어야하며 부모 개체에 추가해야합니다.

ID의 경우 GUID를 ID로 사용하면 올바른 ID를 결정하기 위해 데이터베이스와 통신 할 필요가 없으므로 많은 문제를 줄일 수 있습니다. 객체가 새 것이거나 아닌 경우 객체의 플래그를 유지할 수 있으므로 삽입하거나 업데이트해야합니다.

다시 CSLA가이 모든 것을 처리하지만 상당히 오버 헤드가 있습니다.

취소시 취소 : CSLA에는 n 레벨 실행 취소가 구현되어 있지만 수동으로 수행하려는 경우 CopyFrom 기능을 사용하거나 취소시 재구성 레이어의 객체 데이터를 새로 고침합니다. 술책).

0

방금 ​​NH을 사용하지 않고 이러한 모델을 구현했습니다. 오라클 DB에서 객체를 유지하기 위해 자체 코드를 사용하고 있습니다.

동일한 웹 양식에서 마스터 세부 개념을 사용했습니다.

나는 마스터 엔티티 그리드가 있고 자세한 동작 명령에 나는 클릭 한 마스터 레코드 행 바로 아래에 페널티를 엽니 다.

상세 모드 추가, 정적 필드에 의해 음수로 생성 된 ID를 가진 빈 엔티티를 채우고 세부 사항 저장 버튼을 누르면 Asp.NET 세션의 마스터 레코드 세부 정보 목록에 해당 엔티티가 저장됩니다.

상세보기 Edit, View i는 Jquery를 사용하여 ajax 호출을 통해 Detail Detail 패널을 채우고 클릭 된 행 바로 아래에 해당 페널을 추가했습니다.

저장 단추에서 데이터베이스의 마스터 세션 (세부 정보 목록 포함)을 유지했습니다.

나는 주인이 채워야 할 세부 사항이 여러 개인 것처럼 나에게 좋았습니다.

또한 Jquery Modal을 사용하여 행 아래에 추가하는 대신 해당 패널을 팝업으로 사용할 수 있습니다.

는 희망이 도움 :) 감사 의견을

관련 문제