J'ai un cache de données qui est actualisé à partir d'une source externe, et je veux limiter mon accès à son cache (en lecture seule) à l'intérieur de mon application. Je ne veux pas avoir à actualiser la source de données chaque fois que j'ai besoin d'y accéder (c'est-à-dire instancier et extraire toutes les données dont j'ai besoin, car il y a beaucoup de données qui sont mises à jour). Je suppose que c'est l'un des pièges de l'implémentation d'un projet et de l'apprentissage de la langue en même temps. Je sais que la logique doit êtreComment implémenter Singleton Pattern (syntaxe)
if instance is null
synchronize
if instance is null
instance = new MySingleton()
mais l'absence de null me lance pour une boucle. Je pense que je peux utiliser un type d'option, etc, mais il est de me jeter pour une boucle
type MySingleton =
[<DefaultValue>]
static val mutable private instance: MySingleton option
static member GetInstance() =
match instance with
| Some(i) -> i
| None ->
*MySingleton.instance = new MySingleton()
MySingleton.instance*
cette logique est faux selon le compilateur ...
if Helper.notExists MySingleton.instance then
MySingleton.instance <- Some(new MySingleton())
MySingleton.instance
dois-je utiliser les instructions IF au lieu? Y a-t-il un modèle préféré pour cette syntaxe dans f #?
commentaire sérieux cette fois-ci . Juste pour vous assurer que vous demandez de l'aide sur la bonne chose, un singleton est une classe spécialement conçue que vous pouvez essayer de créer autant de fois que vous voulez, mais après le premier, chaque fois que vous obtenez cette première instance. donc si vous avez essayé de créer un tableau de singletons, vous obtenez juste un tableau de ce même objet. En lisant votre question, il est difficile de dire si vous voulez vraiment ce comportement. – thecoshman
Oui, oui; Le singleton contiendra un grand cache de données et fournira l'accès aux données chaque fois que nécessaire sans que chaque utilisation de la classe ait besoin d'actualiser/extraire les données (ce qui est un long processus). – akaphenom