【发布时间】:2019-12-03 03:56:58
【问题描述】:
我的应用可以让人们记录他们看过的电影(例如)。每个记录的电影通常(但不总是)有一个日期,有时有一个时间。有一个但没有另一个并不罕见。有时日期只有一年(“我在 1984 年的某个时候看过 Dumbo”),但实际上可能是日/月/年/时间的任意组合。
我习惯于在我的应用程序和后端将日期建模为日期对象。但是单独存储每个组件是一种可行的方法吗?当我需要从组件中引用实际日期时(例如,用于对日志进行排序),这将在客户端构建,或者可能存储为派生属性 sortDate 并在任何组件发生更改时更新。
我的保留是,用户保存的信息确实是“及时”,我必须自己处理一些事情 - 例如,我的组件相对于哪个时区存储?这将作为真实 Date 对象的一部分自动捕获。
替代方法似乎是为缺少的组件假设某种“默认”(例如,如果没有年份,则为 0000 年,如果没有时间,则为时间 00:00)。但是这些默认值是有意义的,我无法将它们与“未提供”区分开来。
这种方法有哪些限制和/或陷阱?有没有人有过这样建模日期的经验?
如果有任何后果,我的应用程序是用 Swift 编写的 iOS 应用程序,并使用 Parse Server 后端。
【问题讨论】:
-
不确定这是个好主意(恕我直言)。设计一系列结构可能会更好,这些结构提供您需要的功能并且能够提供
Date值或(如果您愿意)DateComponents或者,可能更好的是一些生成可展示值的方法(即String) -
我认为这或多或少是我提议的——在 iOS 中,我们有 DateComponents 可以选择存储任何此类组件,或者任何可以为零。如果我错过了你的观点,请告诉我 - 我不是 100% 正确理解“一系列结构”。
-
恕我直言,我会避免将
DateComponents作为“存储”机制,而是依赖一个或多个可以更可靠地描述数据的结构。例如“年份”、“日期”和“日期和时间”,您可以围绕它们做出更好、更多、明确的决定——但这只是我 -
啊,我使用“日期组件”来表示“日期的组件”,而不是专门使用
DateComponents。是的,一个专门构建的容器可能是实现。 -
啊,对不起我的困惑????????
标签: ios swift design-patterns database-design model