Я был вовлечен в систему, которая представляла аналогичную проблему.Нашим разрешением было Schedule
, которое определяло общее время начала и окончания, каждое из которых имело совокупность (до семи) ScheduleDay
, которые представляют дни недели.
Schedule
StartDateTime
EndDateTime
ScheduleDay
DayOfWeek (enum for Mon, Tues etc)
StartTime (time of day, expressed as minutes)
EndTime (time of day, expressed as minutes)
Это позволяетпериоды времени, такие как «13:00 - 15:00 каждый вторник с 1 марта 2010 года по 10 сентября 2010 года»;например, достаточно сложные, но все еще формирующие периоды времени.
Хотя это все еще немного неуклюже.То, что вы действительно хотите, - это представление данных диаграммы Ганта;коллекция периодов «вкл» и «выкл», которые образуют временные интервалы.
Если бы я проектировал эту систему, я бы подумал о сохранении унарной функции, которая принимает DateTime
и возвращает bool
, которая описывает, существует ли данное время в период времени.Вашему бизнес-объекту нужен делегат;это может быть просто if (date.Year == 2010) return true else return false
, или он может быть чрезвычайно сложным в зависимости от периода времени, который вы представляете, но он позволяет полностью расширяемые периоды времени (не ограничения на то, что может быть представлено).
К сожалению, я не понимаюне знаю, как это можно сделать внутри базы данных, и, очевидно, это не POCO.