Pattern per il caching DAO: strategia o decoratore?

3

Sto costruendo un sistema php con il modello Servizi / DAO / Modelli di dominio e ora è il momento di implementare un sistema di memorizzazione nella cache per i DAO.

Utilizzeresti un motivo decoratore o forse il modello di strategia?

Quali sono gli alti e bassi di ognuno?

requisito aggiuntivo : come ho detto in un commento rispondendo a edalorzo ho bisogno di essere in grado di utilizzare i DAO senza alcun caching in alcuni momenti. Per lo stesso metodo a volte è accettabile avere la cache, ma altre volte no.

    
posta antonienko 24.12.2014 - 16:02
fonte

2 risposte

3

Ho visto l'implementazione delle cache usando un pattern Proxy. In particolare i framework come AOP utilizzano i proxy per la maggior parte di queste cose.

Secondo il libro Modelli di design ed elementi del software orientato agli oggetti riutilizzabile il decoratore e il modello proxy possono sembrare uguali /

Pagina 216:

"Although decorators may have similar implementations as proxies, decorators have a different purpose. A decorator adds one or more responsibilities to an object, whereas a proxy controls access to an object.

Proxies vary in the degree to which they are implemented like a decorator.A protection proxy might be implemented exactly like a decorator. On the other hand, a remote proxy will not contain a direct reference to its real subject but only an indirect reference, such as a "host ID and local address on the host". A virtual proxy will start off with an indirect reference such as a file name but will eventually obtain and use a direct reference"

Sembra che il tuo scopo con la cache sia di evitare di dare accesso diretto al soggetto reale, quindi suona più come un proxy per me.

Il commento sopra chiaramente rende evidente che un'importante differenza tra un delegato e un decoratore è che il delegato può essere responsabile dell'istanziazione o dell'accesso al soggetto reale, mentre nel caso del decoratore ci si aspetta che tale il riferimento verrà fornito dinamicamente.

Sembrerebbe che la relazione tra il proxy e il soggetto reale sia più statica che nel caso del decoratore.

Detto questo, in definitiva nel tuo caso è una questione di intenti più di come sarà il design. Alla fine la soluzione è avere un oggetto wrapper (chiamato Proxy o Decorator) che intercetterà il metodo e ti permetterà di controllare quando accedere a una cache o meno in base al criterio della cache.

    
risposta data 24.12.2014 - 19:04
fonte
1

L'ho implementato in entrambi i modi in passato, e la mia esperienza è stata che l'utilizzo di un decoratore comporta una separazione più chiara delle responsabilità tra le due classi, poiché l'utilizzo di una strategia richiede supporto nella classe di accesso ai dati, mentre con un decoratore scrivi la classe di accesso ai dati come faresti se non implementassi il caricamento in cache.

    
risposta data 24.12.2014 - 16:33
fonte

Leggi altre domande sui tag