Je suis en train d'étendre NHibernate Fluent pour une meilleure utilisation avec F # (à savoir, le support de devis), et je veux des commentaires sur la fluidité de l'API. F # exige que les valeurs de retour soient utilisées, sauf si elles sont de type unit. Donc, cela finit par mettre fin à chaque ligne avec « |> ignorer »:F #: Meilleure façon de démultiplier une 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
Ma première réaction a été d'ajouter d'autres méthodes à la classe de base afin qu'ils reviennent l'unité. Par exemple, « dI » et « Mapi »:
...
m.IdI <@ x.Id @>
m.MapI <@ x.Name @>
m.MapI <@ x.Price @>
...
Mais cela nécessite spécifiques ici et surcharges là, et de longues chaînes vont encore avoir besoin d'une |> Ignorer. J'ai également considéré l'extension d'objet avec une propriété Terminé:
(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
Qu'en pensez-vous?
Oui ... mais c'est beaucoup de travail;). Je vais jouer avec idée, merci! – MichaelGG
Je sais ... mais utiliseriez-vous NUnitEx (http://code.google.com/p/nunitex/) en F #, ou essaieriez-vous de construire quelque chose comme FsUnit (http://code.google.com/ p/fsunit /)? –
DSLs/interfaces fluides ne sont tout simplement pas très portable entre les langues ... par exemple, je ne m'attendrais jamais à être en mesure d'exécuter un Boo DSL en C# même si elle fonctionne sur la même plate-forme ... donc c'est la même chose avec F # –