Ho letto sull'approccio "interfaccia fluida" OO in Java, JavaScript e Scala e mi piace l'aspetto di esso, ma ho faticato a vedere come riconciliarlo con un approccio più basato su tipo/funzionale in Scala .Come posso combinare interfacce fluenti con uno stile funzionale in Scala?
Per fare un esempio molto specifico di quello che voglio dire: ho scritto un client API che può essere invocato in questo modo:
val response = MyTargetApi.get("orders", 24)
Il valore restituito da get()
è un tipo Tuple3
chiamato RestfulResponse
, come definito nel mio package object:
// 1. Return code
// 2. Response headers
// 2. Response body (Option)
type RestfulResponse = (Int, List[String], Option[String])
Questo funziona bene - e io in realtà non vogliono sacrificare la semplicità funzionale di un valore di ritorno tuple - ma vorrei estendere la libreria con varie f' 'chiamate di metodo, forse qualcosa di simile:
val response = MyTargetApi.get("customers", 55).throwIfError()
// Or perhaps:
MyTargetApi.get("orders", 24).debugPrint(verbose=true)
Come posso combinare la semplicità funzionale di get()
restituire una tupla digitato (o simili) con la possibilità di aggiungere piu 'luent capacità fluente' alla mia API?
Questo approccio "interfaccia fluida" ... non sembra molto amichevole verso linguaggi tipizzati staticamente. Anche se sono sicuro che con un po 'di codice ed ereditarietà di wrapping potresti probabilmente farlo con Scala, non sarà sicuro come sicuro come avere getOrders' e 'getCustomers' separatamente, invece di' get ("orders") 'e 'get (" customers ")' usando lo stesso metodo 'get'. –
Grazie Dan - ma non mi preoccuperei troppo della sintassi 'get (" slug ", id)' - questa non è veramente la mia domanda. In ogni caso nella libreria c'è un'altra modalità più tipicamente simile a 'MyTargetApi.orders.get (id)' –
Personalmente penso che dovresti offrire un esempio più rappresentativo di un codice scorrevole e esattamente quale bit pensi non sia funzionante. Al momento, sembra proprio dalla tua domanda che non sai veramente cosa significhi fluente –