2013-03-17 3 views
1

나는 이 RavenDB 문서의 모델을 구조화하는 방법은 무엇입니까?

{ 
    "RpcTechDataCollectionModel": { 
     "Weekend": "March 16 - 17, 2013", 
     "ServiceTitle": "Some Title", 
     "Notes": "", 
     "WeekendServices": [{ 
      "ServiceTime": "", 
      "SiteName": "Bowridge", 
      "SoundOperator": "Rob", 
      "WorshipLeader": "Daryl", 
      "Notes": "", 
      "Songs": [{ 
       "SongName": "Foo", 
       "MinSpl": "86", 
       "MaxSpl": "92", 
       "Note": "" 
      }, { 
       "SongName": "Bar", 
       "MinSpl": "89", 
       "MaxSpl": "96", 
       "Note": "" 
      }] 
     }, { 
      "ServiceTime": "", 
      "SiteName": "Bearspaw", 
      "SoundOperator": "Peter", 
      "WorshipLeader": "Tim", 
      "Notes": "", 
      "Songs": [{ 
       "SongName": "Das", 
       "MinSpl": "86", 
       "MaxSpl": "91", 
       "Note": "" 
      }, { 
       "SongName": "Bar", 
       "MinSpl": "87", 
       "MaxSpl": "99", 
       "Note": "" 
      }] 
     }] 
    } 
} 

지금 나는이에 대한 모델을 구축을 위해 노력 해요 RavenDB 문서에 대한 다음과 같은 구조를 가지고,하지만 난 가장 좋은 방법이 될 것 구조화 하는지를 모르겠습니다. 참고 WeekendService 또는 Song 부모 개체의 외부에 사용되는 하위 개체의 아무도 RpcTechCollectionModel

옵션 중 하나는 친절하고 깨끗하고 쉽게 그대로

namespace MyProject.Models { 
    using System.Collections.Generic; 
    public class RpcTechDataCollectionModel{ 
     RpcTechDataCollectionModel(){ 
      this.WeekendServices = new List<WeekendService>(); 
     } 
     public string Weekend { get; set; } 
     public string ServiceTitle { get; set; } 
     public string Notes { get; set; } 
     public List<WeekendService> WeekendServices { get; set; } 
     public class WeekendService{ 
      WeekendService(){ 
       this.SongRecords = new List<SongRecord>(); 
      } 
      public DateTime ServiceTime { get; set; } 
      public string SiteName { get; set; } 
      public string SoundOperator { get; set; } 
      public string WorshipLeader { get; set; } 
      public string Notes { get; set; } 
      public List<Song> Songs { get; set; } 
      public class Song { 
       public string SongName { get; set; } 
       public double MinSpl { get; set; } 
       public double MaxMax { get; set; } 
       public string Note { get; set; } 
      } 
     } 
    } 
} 

내가이 선호 없을 것 알다. 문제는 기술적으로 "One class per file"규칙을 위반하는 것입니다 이것은 그 규칙을 위반하지만, 약간의 것 같아하지 않는 옵션이

public class RpcTechDataCollectionModel{ 
    RpcTechDataCollectionModel(){ 
     this.WeekendServices = new List<WeekendService>(); 
    } 
    public string Weekend { get; set; } 
    public string ServiceTitle { get; set; } 
    public string Notes { get; set; } 
    public List<WeekendService> WeekendServices { get; set; } 
} 
public class WeekendService{ 
     WeekendService(){ 
      this.SongRecords = new List<SongRecord>(); 
     } 
     public DateTime ServiceTime { get; set; } 
     public string SiteName { get; set; } 
     public string SoundOperator { get; set; } 
     public string WorshipLeader { get; set; } 
     public string Notes { get; set; } 
     public List<Song> Songs { get; set; } 

} 
public class Song { 
    public string SongName { get; set; } 
    public double MinSpl { get; set; } 
    public double MaxMax { get; set; } 
    public string Note { get; set; } 
} 

고통.

한 가지 방법이나 다른 방법으로 찬성/반대하는 것은 무엇이고, "올바른/선호하는"한 가지 방법입니까, 아니면 이와 같은 상황에서 "무엇이든지 배를 띄우는 것"입니까?

답변

2

중첩 클래스는 일반적으로 구현 세부 정보를 숨기고 소비자가 잘못 사용하는 것을 방지하는 데 사용됩니다. 이 클래스는 데이터 계약을 정의하기 때문에 숨길 것이 아무것도없는 것 같습니다. 다른 사람이 자신을 수정하지 못하도록하고 싶어도 (소유권을 유지하는 데이터 계약에 대해 의미가 있음) 더 잘 봉인 할 수 있습니다.

나는 그들을 다른 파일에 넣었을 것이며 아마도 폴더에 그룹화했을 것이다.

+0

이는 의미가 있습니다. 모든 것을 분리한다고 가정하면 현재 구현과 별도로 정보가 필요한 경우 유연성이 추가됩니다. –

관련 문제