Sto lavorando a un progetto di sito Web per un corso di ingegneria del software. Questo sito utilizzerà un database per memorizzare i dati, attualmente tramite JDBC e MySQL.
Ora la prima cosa che vorrei fare è usare il pattern bridge per disaccoppiare JCBC / MySQL dall'implementazione del sito web, in modo che se in futuro decidiamo di passare a un altro fornitore (come Microsoft Server) , sarà più facile, "solo" cambiare il riferimento alla classe implementor nella classe di astrazione.
Allo stesso tempo, molte delle mie classi usano funzioni molto simili sui databae. Ad esempio, ho tre classi, TripControl, RouteControl e LocationControl, e ognuno di loro ha una classe che usano per parlare al database (TripDB, RouteDB, LocationDB). Quindi stavo pensando, usiamo il modello di strategia, e fallo in modo che TripControl, RouteControl e LocationControl parlino tutti con una classe Context (usando la terminologia del libro qui), e poi usi un oggetto Policy per selezionare quale comportamento usare (TripPolicy per TripDB, RoutePolicy per RouteDB, LocationPolicy per LocationDB), in questo modo si dovrebbe rendere l'utilizzo del DB facile per gli altri sviluppatori (basta scegliere la politica e dimenticare il resto).
Ok, quindi diciamo che uso il modello Strategy, senza Bridge, e passo da MySQL a MS Server (o io uso entrambi), avrei bisogno dei seguenti oggetti policy: TripPolicyMySQL, TripPolicyMS, RoutePolicyMySQL, RoutePolicyMS , RoutePolictyMySQL, RoutePolicyMS, per poter scegliere il tipo di database su cui sto lavorando. Questo rende più difficile per gli sviluppatori implementare le loro classi, e sembra (per me, almeno in questo momento) non molto adatto a un cambiamento.
Se dovessi usare la strategia insieme al Bridge, dovrei avere qualcosa del genere:
Gli sviluppatori hanno solo tre oggetti della politica (LocationPolicy, RoutePolicy, TripPolicy), e usano solo quelli. Quindi, a un livello inferiore, il modello di strategia utilizzerà l'interfaccia di Bridge (ad esempio TripDB sarebbe un ponte per TripDBMySQL e TripDBMS), che nasconderà l'implementazione del database, che potrebbe essere MS Server o MySQL.
Questo avrebbe senso? Immagino che sia più lento a causa di tutte le indirette, ma dovrebbe renderlo più semplice agli sviluppatori e in teoria dovrebbe rendere il sistema più semplice da esplorare.