C# 您将如何构建此RavenDB文档的模型?

C# 您将如何构建此RavenDB文档的模型?,c#,model,ravendb,C#,Model,Ravendb,我为RavenDB文档提供了以下结构 { "RpcTechDataCollectionModel": { "Weekend": "March 16 - 17, 2013", "ServiceTitle": "Some Title", "Notes": "", "WeekendServices": [{ "ServiceTime": "", "SiteName": "Bowrid

我为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": ""
            }]
        }]
    }
}
现在我正试图建立一个模型,但我想知道构建它的最佳方式是什么。注意,子对象
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; }
            }
        }
    }
}
这并不违反规则,但似乎有点痛苦


这样或那样做的利弊是什么,一种方式被认为是“正确的/首选的”,还是在这种情况下更像是“随波逐流”?

嵌套类通常用于隐藏实现细节,从而防止使用者误用它们。由于这些类只是定义数据契约,所以似乎没有什么需要隐藏的。即使您想阻止任何人修改它们(这对于您拥有所有权的数据契约来说是有意义的),最好将它们密封起来


我会将它们放在不同的文件中,也许会分组到文件夹中。

这很有意义。我认为,如果我们需要与当前实现分离的信息,那么将其全部解耦将增加灵活性。
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; }
}