在F#中使用空列表还是“列表选项”更好?
f#
在 F# 中的域模型中使用可能为空的列表时是否有最佳实践?例如,在一个待办事项应用程序中,一个任务可能有 0 到 N 个子任务。哪种建模方式是首选?
type Task :
{ Name : string
SubTasks : Task list option }
或者
type Task :
{ Name : string
SubTasks : Task list } //potentially empty
我是一个初学者,但在我看来,业务逻辑可以与任何一种实现一起使用。我会通过检查选项类型或检查长度 = 0 的列表长度来验证没有子任务。
如果我们将 的值添加ParentTask : Task option到任务记录类型中,也许最好也将子任务列表作为一个选项?
谢谢!
回答
仅Task list option当值None和之间存在有意义的差异时才使用Some []。否则,您只是添加了一个冗余的可能状态,该状态需要在任何地方使用Option.map等进行处理。
听起来您的域中这两种状态之间没有区别,因此您可能应该只使用Task list.