如何以面向对象的方式模拟商店的开放时间?

时间:2014-06-18 20:31:46

标签: oop data-modeling modeling

我需要什么

我想构建一个具有模型" shop"在里面。每个商店都有营业时间。这些开放时间可能非常复杂。我认为复杂性最好用例子证明:

  1. 商店周一至周五营业时间为10点至18点。
  2. 商店营业时间为周一至周三10点至18点,周四14点至18点,周五10点至14点。
  3. 商店周一至周日营业时间为10点到18点,但仅限于给定时间段,例如2014年4月18日至2014年5月30日
  4. 商店在每个月的第二个星期六开放,从10点到16点。
  5. 一家商店全年营业,从周一到周六的8点至20点,但不是在几个特殊日子,例如12月24日至26日和复活节星期一。
  6. 如您所见,有许多复杂的组合。

    结果数据结构应该支持三件事:

    1. 返回下半年商店开放的所有时间范围列表(或该数量级的商品)
    2. 返回向最终用户显示的开放时间的人类可读表示。
    3. 最终用户将输入商店的营业时间,应该能够轻松地通过表格指定上述任何可能性(无需培训,在网站上)。
    4. 我的方法

      我试图将其建模为对象结构。我目前的想法是:

      • 每个开放时间是实现公共接口的对象。
      • 对于每种情况,都有一个实现它的类,例如:

        • 一个班级是"每周开放时间",模拟开放时间,如#1(一周中每天的开放和关闭时间)
        • 特定单日期(12月24日)的一个班级
        • 每个月(每个月的第二个星期六)重复一次课程
        • 一个更长时间跨度的课程(2014年4月18日至2014年5月30日)
        • 更多,如果需要的话。
      • 每家商店都有开放时间列表。

      • 这些开放时间中的每一个都有一个例外列表,其中每个例外都是一个开放时间本身,这可能反过来也有例外。

      我看到的问题

      我最关心的是可用性:如何打印这样建模的开放时间,以及用户如何输入?

      我对其他方法持开放态度。尚未实施任何内容,在考虑上述方法时,我的肚子酸痛......

1 个答案:

答案 0 :(得分:2)

(就数据建模标签而言)一个单一实体:

OpeningPeriod(CalendarDay,OpeningHour,ClosingHour)

OpeningPeriod(OpeningTimeStamp,ClosingTimeStamp)。

任何商店/组织的完整开放/关闭时间表是一组这样的开放时间。

不要尝试捕捉某种"通用无所不包的预测方式"描述任何可能的开始/结束时间表"完全",包括所有例外和例外。你将失败,因为"例外"的性质无止境。当你开始尝试"优先排序时,你也会很快遇到严重的问题。在重叠的规则之间。

尝试建立尽可能多的"标准"尽可能在UI中基于规则的设施,以及在OpeningPeriod的最低细节处管理计划的工具,用于处理由提供的规则未处理的任何可能的"异常"。