如何为这个RavenDB文档构建模型?

本文关键字:文档 构建 模型 RavenDB | 更新日期: 2023-09-27 18:04:11

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之外使用。

选项1

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; }
}

这并没有违反这个规则,但是看起来有点痛苦。

这样做的利弊是什么?在这种情况下,一种方式被认为是"正确的/首选的",还是"随你的便"?

如何为这个RavenDB文档构建模型?

嵌套类通常用于隐藏实现细节,从而防止消费者滥用它们。由于这些类只是定义数据契约,因此似乎没有什么可隐藏的。即使你想防止任何人修改它们(这对于你拥有所有权的数据合约来说是有意义的),最好还是把它们密封起来。

我会把它们放在不同的文件中,或者分组在文件夹中。