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": ""
            }]
        }]
    }
}

今、私はこのためのモデルを構築しようとしていますが、それを構造化するための最良の方法は何であるか疑問に思っています。サブオブジェクトはなく、親オブジェクトの外部で使用されることに注意し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; }
            }
        }
    }
}

私はこれが素晴らしくてきれいで、理解しやすいのでこれを好みます。問題は、「ファイルごとに1つのクラス」ルールに技術的に違反していることです。

オプション2

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

これはそのルールに違反していませんが、少し苦痛のようです。

どちらかの方法でそれを行うことの賛否両論は何であり、一方の方法は「正しい/好ましい」と見なされますか、それともこのような状況でより「あなたのボートを浮かぶものは何でも」ですか?

4

1 に答える 1

2

ネストされたクラスは通常、実装の詳細を隠すために使用されるため、消費者による誤用を防ぎます。これらのクラスはデータ コントラクトを定義するだけなので、隠すものは何もないように見えます。誰かがそれらを変更できないようにしたい場合でも (所有権を保持しているデータ コントラクトには意味があります)、封印することをお勧めします。

それらを異なるファイルに入れ、おそらくフォルダーにグループ化します。

于 2013-03-17T04:42:39.880 に答える