【问题标题】:How to model the opening times of shops in an object oriented way?如何以面向对象的方式对商店的营业时间进行建模?
【发布时间】:2014-08-09 06:41:20
【问题描述】:

我需要什么

我想构建一个包含模型“商店”的应用程序。每个商店都有营业时间。这些开放时间可能非常复杂。我认为复杂性最好通过示例来说明:

  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 日以及复活节星期一。

如您所见,有许多复杂的组合。

生成的数据结构应该支持三件事:

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

我的方法

我试图将它建模成一个对象结构。我目前的想法是这样的:

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

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

  • 每个开放时间都有一个例外列表,其中每个例外都是开放时间本身,而开放时间本身又可能有例外。

我看到的问题

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

我对其他方法持开放态度。目前还没有实现任何东西,一想到上面的方法,我就感到胃痛......

【问题讨论】:

  • 是的,祝你好运,也等待一些关于这个问题的想法。但不要担心有人会以某种方式提出一个好主意,他们总是这样做;)
  • 使用 iCalendar RRules,以及在您选择的 OO 语言中支持它的库。
  • @NeilMcGuigan 你碰巧知道一些 PHP 库吗?我只能找到iCalcreator,但对我来说似乎不是很高级。

标签: oop data-modeling modeling


【解决方案1】:

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

OpeningPeriod(CalendarDay, OpeningHour, ClosingHour)

OpeningPeriod(OpeningTimeStamp, ClosingTimeStamp)。

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

不要试图捕捉某种“通用的无所不包的谓词方式”来“完整地”描述任何可能的开/关时间表,包括所有例外和例外情况。你会失败,因为“例外”的性质没有尽头。此外,当您开始尝试在重叠的规则之间“确定优先级”时,您很快就会遇到严重的问题。

只需尝试在 UI 中构建尽可能多的“标准”基于规则的设施,以及在 OpenPeriod 的最低细节处管理日程安排的设施,以处理任何可能的“所提供规则未处理的异常”。

【讨论】:

    猜你喜欢
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 2020-11-14
    • 2011-11-09
    • 2014-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多