gpt4 book ai didi

f# - 将数据库记录建模为类型

转载 作者:行者123 更新时间:2023-12-04 15:16:18 25 4
gpt4 key购买 nike

我正在用 F# 重写一个 C# 库,其中大多数类与数据库表(类似于 ActiveRecord)一对一映射。我正在考虑是否使用记录或类(甚至可能是 DU?)。在属性 setter 中有相当数量的验证来维护不变量。在 F# 中建模的最佳方法是什么?我不希望将违反业务逻辑的对象持久化到数据库中。欢迎任何想法。

一些额外的想法......
将不变量移动到外部“ Controller ”类是否更好?来自 C# 允许与数据库记录对应的对象包含无法保存到数据库的任何内容,这感觉是错误的。我想是因为早点失败似乎比晚点失败要好。

最佳答案

通过将方法附加到记录,您可以将数据保存在记录中,并且仍然使用数据类型保留验证逻辑:

type Person =
{ First : string;
Last : string; } with
member x.IsValid () =
let hasValue = System.String.IsNullOrEmpty >> not
hasValue x.First && hasValue x.Last

let jeff = { First = "Jeff"; Last = "Goldblum" }
let jerry = { jeff with First = "Jerry" }
let broken = { jerry with Last = "" }

let valid = [jeff; jerry; broken]
|> List.filter (fun x -> x.IsValid())

记录的复制语义几乎和设置属性一样方便。验证不会发生在属性集上,但很容易将记录列表过滤为仅有效的记录。

关于f# - 将数据库记录建模为类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2089707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com