2009-11-30 12 views
2

Quelqu'un peut-il me donner s'il vous plaît aucun exemple de situation dans une application axée sur base de données où je devrais utiliser modèle FLYWEIGHT?Utiliser modèle dans l'application Flyweight en base de données

Comment puis-je savoir que je devrais utiliser modèle poids mouche à un point dans ma demande?

J'ai appris modèle poids mouche. Mais je ne suis pas capable de comprendre une place appropriée dans mes applications métier pilotées par base de données pour l'utiliser.

+0

Qu'est-ce que le modèle Flyweight? – CannibalSmith

+0

Notez que si vous utilisez un Object-Relational Mapper (ORM), l'ORM peut rendre redondant le modèle de poids mouche dans votre application. Certains ORM fonctionnent déjà avec des instances de données partagées lors de la récupération d'une grande quantité de données à partir d'une base de données. – bzlm

Répondre

3

Sauf pour une application de base de données très spécialisée, la masselotte pourrait être utilisé par votre application, mais probablement pas pour une classe qui représente une entité qui est persisté dans votre base de données. Flyweight est utilisé quand il pourrait être nécessaire de créer autant d'instanciations d'une classe que si vous instanciez un temps discret dont vous aviez besoin, les performances en souffriraient. Donc, à la place, vous instanciez un nombre beaucoup plus petit d'entre eux et les réutilisez pour chaque instance requise en changeant simplement les valeurs de données pour chaque utilisation. Cela serait utile dans une situation où, par exemple, vous pourriez avoir à instancier des milliers de telles classes chaque seconde, ce qui n'est généralement pas le cas pour les entités persistées dans une base de données.

1

[Pas un gars DB donc c'est ma meilleure estimation]

Le bonus réel au modèle de poids mouche est que vous pouvez réutiliser les données si vous avez besoin; Un autre exemple est le traitement de texte où, idéalement, vous auriez un objet par "personnage" dans votre document, mais qui consomme beaucoup trop de mémoire, de sorte que la mémoire de masse volumique vous permet de stocker uniquement une valeur unique.

Un deuxième moyen (et peut-être le plus simple) de le regarder est comme le regroupement d'objets, mais vous mettez en commun un niveau "par champ" par opposition à un niveau "par objet". En fait, maintenant que j'y pense, ce n'est pas sans rappeler l'utilisation d'un morceau de mémoire (relativement petit) dans c (++), donc stockez des données brutes que vous manipulez avec des pointeurs.

[See this wikpedia article].

+1

-1 Une partie très importante de Flyweight est que les données sont partagées * entre de nombreuses instances - elles ne le seraient pas, en utilisant votre «structure de données volumineuse».Le poids mouche est mieux appliqué aux types immuables, donc un utilisateur (qui ressemble beaucoup à une entité de domaine) est un très mauvais candidat pour Flyweight. –

+0

J'ai ajouté un autre exemple plus simple. La clé est que vos objets pointent simplement sur des données au lieu de contenir des données, de sorte que vous pouvez avoir des valeurs en double pointant vers le même endroit et conserver de la mémoire. – RCIX

+0

@mark: vous avez un bon point, j'ai supprimé cet exemple. – RCIX

2

Vous devriez appliquer un modèle lorsqu'il se propose naturellement comme une solution à un problème concret - ne pas aller chercher des endroits dans votre application où vous pouvez appliquer un modèle donné. Le but de

est Flyweight pour résoudre les problèmes de mémoire, il est logique d'appliquer une fois que vous avez sélectionnés une application et déterminé que vous avez une tonne de cas identiques.

Colors et Brushes de la bibliothèque de classes de base viennent à l'esprit comme exemples.

Depuis une partie très importante de Flyweight est que la mise en œuvre partagée est immuable, de bons candidats dans une application basée sur les données seraient ce Domain-Driven Design fait référence comme Value Objets - mais il ne devient pertinent que si vous avez beaucoup de valeurs identiques.

+0

Pas vraiment sûr que ce soit un bon exemple, il se sent trop "générique" pour être utile à l'OP. – RCIX

+0

Le modèle Flyweight ne concerne pas seulement les problèmes de mémoire, mais aussi les problèmes d'instanciation. L'instanciation d'objets peut prendre plus de temps que d'attirer un objet dans un tableau ou une carte. – user1052080