gpt4 book ai didi

f# - 降低 API 流畅度的最佳方法?

转载 作者:行者123 更新时间:2023-12-03 03:49:36 27 4
gpt4 key购买 nike

我正在扩展 Fluent NHibernate,以便更好地与 F# 一起使用(即引用支持),并希望获得一些关于降低 API 流畅性的反馈。 F# 要求使用返回值,除非它们是单位类型。所以这最终以“|>忽略”终止每一行:

type ProductMap() as m = inherit QClassMap<Product>() do
let x = Unchecked.defaultof<Product>
m.Id <@ x.Id @> |> ignore
m.Map <@ x.Name @> |> ignore
m.Map <@ x.Price @> |> ignore
(m.HasManyToMany <@ seq x.StoresStockedIn @>)
.Cascade.All()
.Inverse()
.WithTableName("StoreProduct") |> ignore

我的第一 react 是向基类添加更多方法,以便它们返回单位。例如,“IdI”和“MapI”:

...
m.IdI <@ x.Id @>
m.MapI <@ x.Name @>
m.MapI <@ x.Price @>
...

但这需要到处都有特定的重载,而且长链仍然需要 |> 忽略。我还考虑过使用 Done 属性扩展对象:

(m.Id <@ x.Id @>).Done
(m.Map <@ x.Name @>).Done
(m.Map <@ x.Price @>).Done
(m.HasManyToMany <@ seq x.StoresStockedIn @>)
.Cascade.All()
.Inverse()
.WithTableName("StoreProduct").Done

你觉得怎么样?

最佳答案

恕我直言,更好的方法是从头开始思考 F#(例如函数管道、柯里化(Currying)、组合器),而不是包装流利的 nhibernate,但是使用流利的 nhibernate用于生成映射。即构建一个F#专用的“并行流畅nhibernate”。

我已经recently posted关于 F# 中 Windsor 的流畅界面的类似问题。我的结论是,许多为 C#/VB.NET 构建的 DSL/流畅接口(interface)会在 F# 中中断,因此我认为最好构建适合 F# 方式的特定流畅接口(interface)。

关于f# - 降低 API 流畅度的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/724249/

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