7

我试图在 F Sharp 示例中使用FluentValidation库。但是我被卡住了,因为我什至无法将简单的 C Sharp 代码转换为 F Sharp 代码。

但后来我认为这个美妙的库只是试图将编程方面的功能位带到 CSharp,所以我应该只在 FSharp 中创建我自己的库,而不是使用它。这将是简单而适当的方式。

所以,我需要一个意见,哪种方式会更好。如果有人可以为此创建 FSharp 示例,那就太好了。这只是为了学习目的,因为我主要在 C# 中使用流利的库。我喜欢在 F# 中与他们一起使用。

4

1 回答 1

9

F# 支持流畅的 DSL,并且有几个具有流畅 API 的 F# 库。F# 的类型系统与 C# 的有点不同,并且大多数差异都会通过流畅的 API 弹出,但仍然有效:

#r @"C:\Users\Ramon\Downloads\FluentValidation\FluentValidation\FluentValidation.dll"

open System
open FluentValidation

type Customer =
    { Surname : string
      Forename : string
      Company : string
      Discout : int
      Address : string
      Postcode : string
      Discount : int
      HasDiscount : bool }

type IRuleBuilder<'T,'Property> with
    member __.Ignore = ()

type CustomerValidator =
    inherit AbstractValidator<Customer>

    new () =
        let beAValidPostcode postcode = true
        base.RuleFor(fun customer -> customer.Surname).NotEmpty().Ignore
        base.RuleFor(fun customer -> customer.Forename).NotEmpty().WithMessage("Please specify a first name").Ignore
        base.RuleFor(fun customer -> customer.Company).NotNull().Ignore
        base.RuleFor(fun customer -> customer.Discount).NotEqual(0).When(fun customer -> customer.HasDiscount).Ignore
        base.RuleFor(fun customer -> customer.Address).Length(20, 250).Ignore
        base.RuleFor(fun customer -> customer.Postcode).Must(beAValidPostcode).WithMessage("Please specify a valid postcode").Ignore
        { }
于 2013-03-24T08:39:27.997 回答