Inizialmente l'ho chiesto a SO, dove era chiuso e ho raccomandato di chiederlo qui. Sto cercando di capire come raggruppare tutte le funzioni necessarie per il mio progetto in classi. L'obiettivo del progetto è eseguire il seguente processo:
- Ottieni le credenziali FTP dell'utente (nome utente e password).
- Verificare che le credenziali stabiliscano una connessione valida al server FTP.
- Interrogare diversi elenchi di SharePoint e unire i risultati di tali query per creare un elenco di elementi che devono essere sottoposti a un'azione.
- Ogni elemento nell'elenco ha una cartella. Per ogni articolo:
- Comprimi il contenuto della cartella.
- Carica la cartella sul server FTP usando SFTP
- Aggiorna i dati di Sharepoint dell'articolo.
- Invia all'utente un rapporto Excel che mostri, ad esempio,
- Articoli senza percorsi cartella
- Elementi che non sono riusciti a comprimere o caricare
I passaggi 2-5 vengono eseguiti su base periodica; se il passaggio 2 restituisce una connessione non valida, l'utente viene avvisato e il processo ritorna al punto 1. Se in qualsiasi momento l'utente preme un determinato tasto, il processo termina.
Ho definito il seguente set di classi, ognuna delle quali è nel proprio file .cs:
SFTP
: processi di trasferimento file
DataHandler
: recupero dei dati di SharePoint / processi di query / aggiornamento. Crea e carica anche i file zip.
Exceptions
: non solo una classe, questo è il file .cs in cui ho tutte le mie classi di eccezioni.
Report
: crea e invia il rapporto.
Program
: la classe principale per l'esecuzione del programma.
Riconosco che la classe DataHandler è un oggetto dio , ma non ho una buona idea di come refactoring Mi sembra che dovrebbe essere più fine di quanto non lo sia solo in Sharepoint, Zip e Upload, ma forse è così.
Inoltre, non ho ancora elaborato come combinare il comportamento periodico con la parte "attesa per l'input dell'utente in qualsiasi punto del processo"; Penso che coinvolga i thread, il che significa che altre classi gestiscono i thread ...
Non sono molto esperto in design pattern, ma ce n'è uno che si adatta bene a questo progetto?
Se questo argomento è troppo grande per essere spiegato chiaramente in una risposta SO, accetterò anche un collegamento a un buon tutorial su ciò che sto cercando di fare qui.