Newsgroup: it.comp.programmare
Titolo: Il pattern ideale

In un software che stò sviluppando ho un particolare problema che
vorrei risolvere, credo si possa ricorrere all'uso dei design
patterns, eccomi quindi in cerca di consigli e idee.
Il software si deve collegare ad un server ed effettuare delle
operazioni, ad esempio richiedere una lista di determinati oggetti.
Ora, i server possono essere di tipo differente, ad esempio FTP e SQL.
Sarà differente anche il comando da inviare, se sono collegato ad un
server FTP dovrò richiedere la lista delle cartelle o file in una
determinata directory, se sono collegato ad un server SQL effettuerò
una query per ottenere i valori di una data tabella.
All'avvio del software io so a che tipo di server mi devo collegare e
ovviamente resterà sempre il medesimo, a software avviato potrei voler
eseguire la funzione retriveList(), questa a seconda del server
dovrebbe mandare il giusto comando come detto sopra.
Quello che vorrei ottenere è una totale trasparenza e una buona
implementazione, eccomi quindi a chiedervi qualche consiglio su come
procedere.
Spero di aver esposto in modo chiaro il problema, se cosi non fosse,
chiedete pure.
Grazie.

 ...
Perché non provi prima con un prodotto di EAI (Enterprise Application 
Integration) già pronto e caso mai sviluppi solo i plugin mancanti che 
ti servono per i dettagli specifici del tuo ambiente? Molti si possono 
anche programmare via scripting.
Non troppo complicato mi era sembrato openadaptor
 
https://www.openadaptor.org/
Ma se vuoi il massimo di flessibilità, ci sono prodotti veramente 
potenti come MuleSoft
 
http://www.mulesoft.com/
e Apache ServiceMix
 
http://www.servicemix.org/
Sempre che non abbia capito male, e tu non abbia bisogno di 
un'applicazione per ETL (Extraction, Transform, Load) per trasferire 
dati da un archivio all'altro. Anche di queste ce ne sono a bizzeffe già 
pronte.
Ciao.

 Grazie.
Allora parti da Abstract Factory
 
http://it.wikipedia.org/wiki/Abstract_factory
Ciao.

 pronte.
Si, forse hai capito male, o meglio, forse mi sono espresso male io...
Provo a spiegare meglio il problema.
Per ora tutta la "base dati" è su un server ftp, gestita ovviamente
tramite cartelle e file, ma l'idea è quella di astrarre tutto nel
caso in futuro sia presente un altro tipo di server, ad esempio SQL o
anche qualcosa di proprietario.
Il mio software si deve collegare a questo server e scaricare una
lista di "oggetti", attualmente questi oggetti sono files (appunto
sul server FTP) ma in futuro potrebbero essere dei valori all'interno
di
una tabella (nel caso di server SQL) o qualcosa di proprietario.
Con uno sguardo al futuro e l'intenzione di implementare qualcosa di
pulito vorrei avere una completa indipendenza dal tipo di server
utilizzato.
Entrando nel dettaglio, all'avvio del software io carico da un file
di configurazione una lista di server (FTP, SQL, altro), alla fine
vado a
popolare una lista di oggetti ServerInfo, che oltre al tipo di server
e all'indirizzo contengono le credenziali di accesso. Da qui in poi
io
vorrei trasparenza, chiamerò la connect() e successivamente una
funzione retriveList().
A seconda che sia collegato ad un server o ad un altro dovrò mandare
su quello specifico canale uno specifico comando.
Spero di essere stato più chiaro, altrimenti chiedete pure quali
punti
sono oscuri, vedrò di far luce.
Grazie.

 Ciao.
In effetti, studiando il problema, era proprio quello a cui avevo
pensato e di cui cercavo conferma.
Devo però ammettere di essere entrato da poco nel mondo dei Desing
Pattern, mondo che trovo molto interessante e affascinante. Quindi non
so bene come modellare il mio problema usando l'Abstrac Factory. Mi
piacerebbe discuterne.
Grazie.

 una query per ottenere i valori di una data tabella.
Boh... mi pare che tu voglia creare una specie di layer, un framework,
con dei comandi di accesso/interrogazione uniformi, a prescindere dal
tipo di server a cui accedi.
Secondo me devi individuare dei macro comandi, per esempio connect,
logon, logoff, disconnect, list, select, get, put...
E per ciascuno scrivere i comandi specifici per quella tipologia di
server, cercando naturalmente di uniformare la gestione degli errori.
In questo modo se tu vuoi recuperare un certo dato da un certo server,
i tuoi comandi ad alto livello sono
connect server
logon user/password
get dato
logoff
disconnect
che poi, se si tratta di un server ftp verranno tradotti in
corrispondenti comandi ftp, mentre se si tratta di un server sql
verranno tradotti in sql.
Il tutto ritengo che possa essere gestito con un interprete, che tanto
c'e' il collo di bottiglia dell'accesso remoto; ed e' piu' semplice
aggiungere una nuova interfaccia quando dovrai considerare un altro
server.

 server.
In effetti è proprio questo che mi serve, esattamente cosa intendi per
interprete?
Alla fine so bene cosa voglio, l'unico dubbio è sull'implementazione
migliore.
Grazie.

 migliore.
Comincia a definire una sintassi che sia in grado di ricopirire almeno
le casistiche con cui hai a che fare.
E uniformare gli errori.