私は、F#(つまり引用のサポート)でうまく使えるようにFluent NHibernateを拡張していますが、APIのde-fluentingに関するフィードバックがほしいです。 F#では、型の単位でない限り、戻り値を使用する必要があります。だから、これはとのすべての行を終端終わる「|>無視」:F#:APIを流動的にする最も良い方法は?
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
私の最初の反応は、彼らがユニットを返すように、基本クラスに複数のメソッドを追加することでした。例えば、「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
あなたはどう思いますか?
そうですが...それはたくさんの仕事です;)。アイデアと一緒に遊ぶよ、ありがとう! – MichaelGG
私は知っていますが、F#でNUnitEx(http://code.google.com/p/nunitex/)を使用するか、FsUnit(http://code.google.com/ p/fsunit /)? –
DSL /流暢なインターフェースは言語間で移植性があまりよくありません...例えば、同じプラットフォームで実行されていてもBoo DSLをC#で実行できるとは思えませんでした。だからF# –