Domanda

Qualcuno può darmi qualche esempio di situazione in un'applicazione basata su database in cui dovrei usare il modello Flyweight?

Come posso saperlo, dovrei usare il modello flyweight in un punto della mia applicazione?

Ho imparato il modello dei pesi mosca. Ma non sono in grado di capire un posto appropriato nelle mie applicazioni aziendali basate su database per usarlo.

È stato utile?

Soluzione

Ad eccezione di un'applicazione di database molto specializzata, Flyweight might può essere utilizzato dall'applicazione, ma probabilmente non per alcuna classe che rappresenta un'entità persistente nel database . Il peso mosca viene utilizzato quando in caso contrario potrebbe esserci la necessità di così tante istanze di una classe che se ne avessi un'istanza ogni volta che ne avessi bisogno ne risentirebbero le prestazioni. Quindi, invece, si crea un'istanza di un numero molto più piccolo di essi e li riutilizzi per ogni istanza richiesta semplicemente modificando i valori dei dati per ogni utilizzo. Ciò sarebbe utile in una situazione in cui, ad esempio, potrebbe essere necessario creare un'istanza di migliaia di tali classi ogni secondo, il che non è generalmente il caso delle entità persistenti in un database.

Altri suggerimenti

Dovresti applicare qualsiasi modello quando si suggerisce naturalmente come soluzione a un problema concreto, non cercare luoghi nella tua applicazione in cui puoi applicare un determinato modello.

Lo scopo di Flyweight è quello di affrontare i problemi di memoria, quindi ha senso applicarlo solo dopo aver profilato un'applicazione e aver stabilito che hai un sacco di istanze identiche.

Colori e Pennelli dalla Libreria di classi base vengono in mente come esempi .

Poiché una parte molto importante di Flyweight è che l'implementazione condivisa è immutabile, i buoni candidati in un'applicazione basata sui dati sarebbero ciò che Domain-Driven Design si riferisce a oggetti valore - ma diventa rilevante solo se si hanno molti valori identici.

[Non un tipo DB quindi questa è la mia ipotesi migliore]

Il vero vantaggio del modello flyweight è che puoi riutilizzare i dati se necessario; Un altro esempio è l'elaborazione di testi in cui idealmente si avrebbe un oggetto per "carattere" nel tuo documento, ma ciò potrebbe consumare troppa memoria, quindi la memoria flyweight ti consente di memorizzare solo uno di ogni valore univoco di cui hai bisogno.

Un secondo (e forse il più semplice) modo di vederlo è come un pool di oggetti, solo che stai raggruppando un "per campo" livello al contrario di un "per oggetto" livello.

In effetti, ora che ci penso, non è diverso dall'uso di un pezzo di memoria (relativamente piccolo) in c (++), quindi memorizza alcuni dati grezzi di cui fai manipolazione con i puntatori per ottenere roba da.

[ Vedi questo articolo della wiki ].

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top