2010-08-02 5 views
1

개체의 목록을 클래스의 속성으로 저장하는 올바른 방법과이를 XML로 올바르게 serialize하는 방법에 대해 생각해보십시오.개체 목록 저장/serialize

예를 들어 Google은 0 개 또는 여러 개의 탭을 포함하는 TabGroup 클래스를 가지고 있습니다.

Tabs 속성 목록이나 Tab에 대한 참조 목록을 가지고있는 것이 더 좋습니까? 단, 탭은 고유 한 슬러그로 식별됩니다. 결국

List<Tab> 

List<string> 

는 단지 전체 TabGroup의 (모든 탭 및 콘텐츠를 포함) 그래프

  • indenpendently Tabgroups 및 탭을 직렬화하고 그들을 분리 maintaing와 일렬

    1. 에 온다 직렬화 된 Tabgroup 그래프의 슬러그 목록을 통해 참조됩니다. 1

    가장 주목할만한 프로 : 전체의

    • Tabgroup은 데이터 저장소 구조의 간단한 유지 한 직렬화 된 파일에 유지됩니다. 1

    가장 눈에 띄는 단점 :

    • 업데이트가 포함 된 탭 중 하나를 만들 때마다, Tabgroup 업데이트해야합니다 (다시 일련 화) 너무. 2

    가장 주목할만한 직업 : 참조가 동일하게 유지하기 때문에

    • 이 Tabgroup의 reserialization을 필요로하지 않습니다 탭을 갱신 (적어도 아무것도를 추가하거나 제거하지 않은); 따라서 업데이트 된 Tab 만 다시 직렬화해야합니다. 2

    가장 유명한 죄수

    • 개별 탭 파일이 파일 저장소에서 삭제 될 수 있지만 오류 때문에 참고 문헌의 목록/동일하게 유지 (이것은 내가 이것을 쓰고있는 주요 이유입니다) 탭 그룹을 보거나 렌더링 할 때 예외가 발생합니다. 복잡한 논리는 "탭이 지원되지 않는 방식으로 데이터 저장소에서 제거되었거나 탭 그룹에서도 제거 되었습니까?"와 같은 것을 표현하기 위해 구현되어야합니다.

    이 문제를 해결하기 위해 무엇을 제안합니까? 나는 여러 가지 의미를 다룰 답을 받아 들일 것이다. 여기서는 XML 지속성에 대해서만 이야기하고 있습니다. 분명히 SQL에서 Tabgroups과 Tabs는 일반적으로 별개의 테이블에있을 것이므로 (실험실과 일대일 관계가 있음) 실험실이 거의 없습니다.

  • 답변

    1

    데이터 저장소를 복잡하게 만드는 이유가 아주 좋은 이유가 아니라면 일반적으로 간단하게 유지해야합니다. 둘째, 전체 게시물을 두 번 읽은 후, 나는 정말로 당신의 질문이 무엇인지 이해하지 못합니다.당신이 당신의 디자인이 List<Tab> 각 문자열이 탭에 대한 링크를 나타냅니다 List<string>, 그때 내가 List<Tab>에 대한 주장 반환할지 여부를 묻는 경우

    나는 당신의 문제가 무엇인지 확실히 모르겠지만. 로드가 문제가되는 경우 ID 또는 링크에 사용했던 모든 것을 제외하고 전체 구조를 지연로드 할 수 있습니다. 일반적으로 링크 목록을 가져 와서 모든 링크를 개별적으로로드하지 않고 개체에서 직접 찾고있는 것을 쉽게 얻을 수 있습니다.

    실제 문제와 관련된 자세한 정보가 없으면 가정 환경에 따라 장단점을 부여하는 것 외에 다른 도움이 될 수 있을지 의심 스럽습니다.

    +0

    문제에 대한 이해가 충분하고 List 이 가장 논리적 인 선택임을 동의합니다. – mare