Я расширяю Fluent NHibernate для лучшего использования с помощью F # (а именно, для поддержки цитат) и хочу получить обратную связь по отказу API. 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
Я знаю ... но вы бы использовали NUnitEx (http://code.google.com/p/nunitex/) в F #, или вы бы попытались построить что-то вроде FsUnit (http://code.google.com/ p/fsunit /)? –
DSLs/плавные интерфейсы просто не очень переносимы на разных языках ... например, я никогда не ожидал, что вы сможете запустить Boo DSL на C#, хотя он работает на той же платформе ... так что это то же самое с F # –