2009-04-07 3 views
2

Я расширяю 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 

Как вы относитесь к тому,

ответ

3

ИМХО лучше было бы начать с нуля мышления в F # (например функции трубопроводов, выделки, комбинаторы) вместо оберточной Fluent NHibernate, но используя то, что Fluent NHibernate использует для создания отображения. То есть, создавая «параллельный свободный доступ» для исключительного использования F #.

У меня есть recently posted об аналогичной проблеме с плавным интерфейсом Windsor в F #. Мое заключение заключается в том, что многие DSL-интерфейсы, созданные для C#/VB.NET, будут разбиваться на F #, поэтому я считаю, что лучше всего создавать конкретные беглые интерфейсы, которые подходят для F #.

+0

Да, но это очень много работы;). Я буду играть с идеей, спасибо! – MichaelGG

+1

Я знаю ... но вы бы использовали NUnitEx (http://code.google.com/p/nunitex/) в F #, или вы бы попытались построить что-то вроде FsUnit (http://code.google.com/ p/fsunit /)? –

+0

DSLs/плавные интерфейсы просто не очень переносимы на разных языках ... например, я никогда не ожидал, что вы сможете запустить Boo DSL на C#, хотя он работает на той же платформе ... так что это то же самое с F # –

Смежные вопросы