private readonly コマ数 koma; // e.g. 12コマ public 予約期間(予約年月日 ReservationDate, 予約開始_時 予約開始_時, 予約開始_分 予約開始_分, コマ数 予約コマ数) { //todo: ビジネスルール:10:00-19:00までしか予約が出来ない // 予約開始時刻とコマ数を見て、10:00-19:00までしか予約できないことを確認する var 残コマ数 = コマ数.残コマ数を教えて(予約開始_時, 予約開始_分); if (!(残コマ数 >= 予約コマ数)) { throw new ArgumentException($"{残コマ数}を超えることはできません"); } //todo: // 1. このメソッドの中で、予約開始時刻のDateTimeとコマ数のDateTimeを貰って、 // 計算をして、10:00-19:00以内だよね?ということを確認する // ↑DateTimeをおもらしするのは止めたほうが良さそう。 // // 1-1: Range が終了時刻を判断する (from 予約開始時刻、コマ数) // 予約開始_時と予約開始_分を渡して、残コマ数が取れる。それを比較する。 // 2. ↑の計算を予約開始時刻クラスか、コマ数クラスの中に委譲する? // 2-1: 予約開始時刻が最大コマ数とかをくれる? // 3. ↑もしかしたら、それ専用のクラスを作るか? // 最終手段. コマ数をやめて、予約終了時刻を作るか? this.ReservationDate = ReservationDate; this.予約開始_時 = 予約開始_時; this.予約開始_分 = 予約開始_分; this.koma = 予約コマ数; }
// こいつは,コマの数ではなくて、実は時間を返してあげる必要がある? public static コマ数 残コマ数を教えて(予約開始_時 開始_時, 予約開始_分 開始_分) { // TODO:日付と秒は適当 // 日付は関係ない! DateTime time = new DateTime(1900, 1, 1, (int)開始_時, (int)開始_分, 0); DateTime endTime = new DateTime(1900, 1, 1, 19, 0, 0); // TODO: 予約可能(?)な最終時刻を知っているのは誰? int miniute = (int)(endTime - time).TotalMinutes; return(new コマ数(miniute / コマあたりの分数)); }
// Enum 分ける // 予約開始_時分 と 予約終了_時分? ==> 元の予約期間みたいに年月日+開始終了の時分 // public 予約開始日時(予約年月日 年月日, 予約開始_時 時, 予約_分 分) { this.年月日 = 年月日; this.時 = 時; this.分 = 分; }