Come organizzare l'integrazione di intermoduli in un progetto modulare?

1

Attualmente sto scrivendo il mio PHP Framework (sì, un altro) per scopi di studio. In realtà cercherò di usarlo come tesi di laurea.

Dopo due tentativi falliti, ho finalmente trovato un modo per svilupparlo in un'architettura modulare, come Zend e Symfony.

Ho alcuni moduli liberamente accoppiati che possono funzionare separatamente l'uno dall'altro, ma la loro usabilità sarebbe meglio se li unissi insieme.

Ora mi sto chiedendo il modo migliore di integrarli. Non sono disposto a mettere un modulo come requisito per l'altro, perché questo rompe il design modulare.

La mia prima idea era quella di creare un modulo diverso che richiedesse gli altri due e li mettesse insieme a lavorare. Funzionerebbe bene quando ho solo due moduli, ma quando ho un modulo che può essere integrato con due o più moduli mi perdo.

Devo creare un modulo per ogni possibile integrazione? O dovrei creare solo un modulo e inserire tutte le integrazioni che potrei avere lì?

Sono chiaro? Altrimenti, proverò a spiegarlo meglio.

Modifica:

Un esempio pratico.

My Data Access Layer implementa il pattern Gateway riga tabella . Ho un TableGatewayInterface e un'implementazione predefinita TableGateway .

Immagina ora che voglio una tabella con una cache per le ultime interrogazioni. Posso raggiungerlo con il pattern Decorator , creando un CachedTableGateway che dipende da TableGateway e un componente cache, diciamo CacheInterface .

Non ho bisogno della cache, ma potrebbe essere utile.

Dovrei incorporare questa implementazione decorata nel pacchetto originale, creando un requisito per il componente cache? O dovrei creare un "pacchetto di integrazione" che richiede sia il gateway di cache che di tabella?

    
posta Henrique Barcelos 26.02.2014 - 14:56
fonte

1 risposta

1

Se stai utilizzando il pattern Decorator, il pacchetto CachedTableGateway implementerà TableGatewayInterface e accetterà un altro TableGatewayInterface per inoltrare le richieste a quello che non è stato trovato nella cache.

Se si dispone di un pacchetto di memorizzazione nella cache generico, il pacchetto CachedTableGateway potrebbe essere implementato utilizzando quel pacchetto di memorizzazione nella cache e ciò implica naturalmente una relazione "richiesta" tra i pacchetti.

Oltre a implementare entrambi la stessa interfaccia, non esiste alcuna relazione tra CachedTableGateway e TableGateway . Spetta al codice cliente (che potrebbe includere test di integrazione) per decorare un TableGateway con CachedTableGateway .

    
risposta data 26.02.2014 - 18:19
fonte

Leggi altre domande sui tag