Scalaで適切に機能する構成可能なオブジェクトを作成するにはどうすればよいですか?モナドでトニーモリスのビデオを見ましたが、Reader
まだ点をつなぐことができません。
オブジェクトのハードコードされたリストがありClient
ます:
class Client(name : String, age : Int){ /* etc */}
object Client{
//Horrible!
val clients = List(Client("Bob", 20), Client("Cindy", 30))
}
Client.clients
プロパティファイルまたはデータベースから読み取る柔軟性を備えた、実行時に決定されることを望んでいます。Javaの世界では、インターフェイスを定義し、2種類のソースを実装し、DIを使用してクラス変数を割り当てます。
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
}
これは私にはかなりクリーンな解決策のように見えますが(多くのコードではなく、明確な意図)、それvar
は飛び出します(OTOH、それは一度だけ注入されることを知っているので、私にはそれほど面倒ではないようです-一度)。
この状況でモナドはどのように見えるでしょうReader
か。私が5歳のように説明すると、その利点は何ですか。