PDA

View Full Version : [C#] "Organizzazione" progetto: cosa sbaglio?


DuHarTapt
11-05-2010, 11:17
Non riesco a capire quale è il modo corretto per organizzare un progetto

Il semplice programmino che devo fare è:
- Un form con due progressbar.
- Quando l'applicazione si avvia scarico il file1, mostrando lo scorrimento nella progressbar1
- terminato il download di file1, scarico il file2, mostrando lo scorrimento della progressbar2
- Finiti entrambi i download lancio prima il file1, e, quando è terminato il processo il file 2.

Come si struttura nel modo corretto il progetto?
Io ho fatto così, funziona, ma non sono convinto di aver fatto le scelte giuste

- Una classe "General" con:

i percorsi dei due file da scaricare
public static string GetCurrentPath() // per ottenere il path in cui c'è l'eseguibile


- Una classe "DownloadFil" con:

DownlaodFil() // costruttore che inizializza WebClient
DownlaodFile(Uri uri,string pathDownloadedFile, DownloadProgressChangedEventHandler downloadProgressChangedhandler, AsyncCompletedEventHandler downloadCompletedHandler)
// aggangia i metodi da richiamare durante la progressione del download e per la conclusione del download
// Richiama il metodo DownloadAsyncFile della classe WebClient, per scaricare il file
Clear(DownloadProgressChangedEventHandler downloadProgressChangedhandler,
AsyncCompletedEventHandler downloadCompletedHandler)
// rimuove i metodi agganciati



- Classe "ProcessFile" con:

public int ExecuteFile(string pathFile): lancia, tramite la classe Process di .net, il file


- Form con le due progressBar in cui ho:

public DownloadForm()
{
InitializeComponent();
downloadFile = new DownloadFil();
downloadFILE1ProgressHandler = new System.Net.DownloadProgressChangedEventHandler(DownloadFILE1ProgressChanged);
downloadFILE1ProgressHandler = new System.Net.DownloadProgressChangedEventHandler(DownloadFILE1ProgressChanged);
downloadFILE2CompletedHandler = new AsyncCompletedEventHandler(DownloadFILE2Completed);
downloadFILE2CompletedHandler = new AsyncCompletedEventHandler(DownloadFILE2Completed);
DownloadFILE1();
}

private void DownloadFILE1()
{
Uri uri = new Uri(General.PATH_FILE1);
downloadFile.DownloadFile(uri,
General.GetCurrentPath() + "\\" + General.FILENAME1,
downloadFILE1ProgressHandler,
downloadFILE1CompletedHandler);

}


DownloadFILE2() // analogo a DownloadFile1()

void DownloadFILE1Completed(object sender, AsyncCompletedEventArgs e)
{
downloadFile.Clear(downloadFILE1ProgressHandler,downloadFILE1CompletedHandler);
DownloadFILE2();

}

void DownloadFILE2Completed(object sender, AsyncCompletedEventArgs e)
{
downloadFile.Clear(downloadFILE2ProgressHandler, downloadFILE2CompletedHandler);
EexecFile1();
}


ProcessFile procFile = new ProcessFile();

private void ExecFile1()
{
int a = procFile.ExecuteFile(PATH FILE1);
if (a != 0)
MessageBox.Show("Errore: " + a);
else ExecFile2();
}


private void ExecFile2()
{
int a = procFile.ExecuteFile(PATH FILE1);
if (a != 0)
MessageBox.Show("Err: " + a);
else MessageBox.Show("OK");
}

E in piu ci sono i due metodi per far scorrere le progress bar




La classe General ha senso?
La classe DownloadFil è utile?
E' corretto trattare gli handler come ho fatto io?
Ha senso avere una classe con un solo metodo (ProcFile)
Le eventuali eccezioni andrebbe bene catturarle in ExecFile1, ExecFile2, DownloadFile1, DownloadFile2?
Avrei potuto ricorrere a interfacce?
In generale cosa ho sbagliato?