Dados de configuração no Scala - devo usar a mônada do Reader?
Como faço para criar um objeto configurável corretamente funcional no Scala? Eu assisti o vídeo de Tony Morris noReader
monad e ainda não consigo conectar os pontos.
Eu tenho uma lista codificada deClient
objetos:
class Client(name : String, age : Int){ /* etc */}
object Client{
//Horrible!
val clients = List(Client("Bob", 20), Client("Cindy", 30))
}
eu queroClient.clients
a ser determinado em tempo de execução, com a flexibilidade de lê-lo a partir de um arquivo de propriedades ou de um banco de dados. No mundo Java, eu definiria uma interface, implementaria os dois tipos de fonte e usaria DI para atribuir uma variável de classe:
trait ConfigSource {
def clients : List[Client]
}
object ConfigFileSource extends ConfigSource {
override def clients = buildClientsFromProperties(Properties("clients.properties"))
//...etc, read properties files
}
object DatabaseSource extends ConfigSource { /* etc */ }
object Client {
@Resource("configuration_source")
private var config : ConfigSource = _ //Inject it at runtime
val clients = config.clients
}
Esta parece ser uma solução bastante limpa para mim (não muito código, intenção clara), masvar
faz pule para fora (OTOH, não parece para mimrealmente problemático, desde que eu seivai ser injetado uma vez e somente uma vez).
Qual seria oReader
monad parece nesta situação e, me explica como eu sou 5, quais são suas vantagens?