2013-03-17 46 views
1

我有一个RavenDB文件你会如何构建这个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": "" 
      }] 
     }] 
    } 
} 

现在我想建立这样的模型下面的结构,但我想知道什么是最好的方法来组织的那样。请注意,没有一个子对象WeekendServiceSong将父对象外使用的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

这很有道理。如果我们需要将信息与当前的实现分离开来,那么我认为将它们全部解耦都会增加灵活性。 – 2013-03-18 20:37:08