He estado leyendo acerca del enfoque OO de 'interfaz fluida' en Java, JavaScript y Scala y me gusta su aspecto, pero he estado luchando para ver cómo conciliarlo con un enfoque más basado en tipo/funcional en Scala .¿Cómo puedo combinar interfaces fluidas con un estilo funcional en Scala?
Para dar un ejemplo muy concreto de lo que quiero decir: He escrito un cliente de API que puede ser invocada como esto:
val response = MyTargetApi.get("orders", 24)
El valor de retorno de get()
es un tipo llamado Tuple3
RestfulResponse
, como se define en mi package object:
// 1. Return code
// 2. Response headers
// 2. Response body (Option)
type RestfulResponse = (Int, List[String], Option[String])
Esto funciona bien - y yo realmente no quieren sacrificar la simplicidad funcional de un valor de retorno tupla - pero me gustaría extender la biblioteca con varios f' uentes' llamadas a métodos, tal vez algo como esto:
val response = MyTargetApi.get("customers", 55).throwIfError()
// Or perhaps:
MyTargetApi.get("orders", 24).debugPrint(verbose=true)
¿Cómo puedo combinar la simplicidad funcional de get()
devolver una tupla escrita (o similar) con la posibilidad de añadir más capacidades fluidas '' a mi API?
Este enfoque de "interfaz fluida" ... no se ve muy amigable con los lenguajes estáticos. Aunque estoy seguro de que con algún código de ajuste y herencia probablemente puedas hacerlo con Scala, simplemente no será tan seguro como tener 'getOrders' y' getCustomers' por separado, en lugar de 'get (" orders ")' y 'get (" clientes ")' utilizando el mismo método 'get'. –
Gracias Dan, pero no me preocuparía demasiado acerca de la sintaxis 'get (" slug ", id)' - de esto no se trata realmente mi pregunta. En cualquier caso, hay otro modo más seguro en la biblioteca que se parece a 'MyTargetApi.orders.get (id)' –
Personalmente, creo que debería ofrecer un ejemplo más representativo de algún código fluido y exactamente qué bit cree que no es funcional. Por el momento, solo surge de su pregunta que realmente no sabe lo que significa –