Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicitÓ e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Costruire una applicazione in modo corretto
Forum - C# / VB.NET - Costruire una applicazione in modo corretto

Avatar
Jolly (Normal User)
Newbie


Messaggi: 1
Iscritto: 01/02/2011

Segnala al moderatore
Postato alle 12:56
Martedý, 01/02/2011
Ciao a tutti.
Vorrei chiedere il vostro supporto per impostare la struttura base di una applicazione e per alcuni passaggi che mi sono poco chiari.

Premetto che me la cavo abbastanza bene con la sintassi del codice, per˛ malgrado lo studio di diversi manuali, e la ricerca su vari forum,
ancora non mi Ŕ chiaro come impostare IN MODO CORRETTO la struttura globale delle applicazioni, sia in termini di utilizzo di classi, moduli, ecc.,
sia riguardo la gestione di alcune funzionalitÓ, come ad esempio la validazione dei dati, la gestione della concorrenza sull'accesso ai dati, e
altre funzioni che andr˛ a chiarire (e a chedervi) pi¨ avanti.

So cos'Ŕ una classe, un modulo, e tutto il resto, quindi non vorrei parlare di questo; vorrei invece confrontarmi sulle pratiche migliori per utilizzare questi costrutti e come farlo concretamente e senza errori grossolani di struttura.
In pratica vorrei che la mia applicazione non si limitasse a funzionare e fare quello che deve fare, ma che fosse anche scritta bene!


LA MIA PROPOSTA:
Per fare un buon lavoro sia per me che per chi potrÓ aver bisogno di queste info, ho pensato di immaginare di costruire in questo post (con il vostro aiuto),
una applicazione elementare, che per˛ rispetti passo passo il corretto approccio allo sviluppo delle funzionalitÓ necessarie.

Proporrei la solita classica applicazione, Clienti-Ordini, che gestisca anche l'accesso di diversi utenti con diversi permessi sull'applicazione e possibilmente sul men¨.

Quindi l'applicativo dovrÓ avere una form iniziale di login, una MainForm MDI con un piccolo men¨, e le form per l'inserimento, cancellazione e aggiornamento dei dati anagrafici dei clienti, dei dati sui prodotti, e infine una form dove poter associare ai clienti le ordinazioni dei prodotti.
L'ultima form mi consentirÓ di aggiungere gli utenti utilizzatori della mia applicazione, con diversi livelli di abilitazione.


Userei un database access, dato che l'applicazione non Ŕ molto complessa, e ci saranno cinque tabelle: "AnagraficaClienti", "AnagraficaProdotti",
"Ordini", la tabella "Utenti" e la tabella "Autorizzazioni" per gestire, tra gli utenti, chi pu˛ fare cosa;

AnagraficaClienti avrÓ 3 colonne: ID (chiave primaria e autoincrementante), "NomeCliente" (testo), "Indirizzo" (testo)

AnagraficaProdotti avrÓ 3 colonne: ID (chiave primaria e autoincrementante), "DescrizioneProdotto"(testo), "QuantitaDisponibile"(Numerico)

Ordini avrÓ 4 colonne: ID (chiave primaria e autoincrementante), "IdCliente"(Numerico), "IdProdotto"(Numerico), "DataOrdine"(Data)

La tabella "Utenti" avrÓ 4 colonne: ID (chiave primaria e autoincrementante), "NomeUtente"(testo), Password(Testo), "IdAutorizzazione"(Numerico)

Infine la tabella "Autorizzazioni" avrÓ 4 colonne: ID (chiave primaria e autoincrementante), "IdUtente", "DescrizioneAbilitazione", "OkInserimento",
"OkAggiornamento", "OkCancellazione"


Vorrei fermarmi a questo punto per potervi chiedere se secondo voi fin qui tutto bene, o se avreste fatto scelte e considerazione diverse, e cominciare con alcune domande, in modo da non spingerci oltre con lo sviluppo senza prima esserci accertati di essere ancora sulla buona strada.

Domanda 1: E' necessario, utile e corretto, creare una classe per ogni entitÓ che dovr˛ gestire con la mia applicazione?
Se Sý, creeremo 4 classi: Clienti, Prodotti, Ordini, Utenti, ognuna con le sue proprietÓ.

Per la gestione del men¨, immaginando che la nostra applicazione fosse un po' pi¨ complessa di come in realtÓ Ŕ, potremmo implementare un binding con una ulteriore tabella nel database (ad esempio una Tab_Men¨ che contenga le voci del men¨ e dei sottomen¨); come la implementereste? Dovremmo creare una qunta classe "Menu"per tenere sotto controllo la gestione del suddetto men¨ o lo fareste da codice della mainForm?
Come potremmo gestire lo stato enabled/disabled di alcune voci di men¨ a seconda dell'utente loggato?

Ultima domanda (per ora): conviene (ed Ŕ formalmente pi¨ corretto) implementare una classe a se stante per la gestione dello scambio dati con il database?
E' preferibile usare un modulo?
E' meglio implementare le funzioni "Aggiungi", "Aggiorna" "Elimina" sia dei clienti che degli ordini, che degli utenti, direttamente nel codice delle relative form oppure all'interno di una classe/modulo separati, o ancora all'interno delle classi stesse che giÓ rappresentano gli oggetti (intendo ad esempio che ogni classe come "Clienti" possa esporre delle funzioni di Inserimento, Aggiornamento, Cancellazione)


E' un post lungo, che non finisce qui, e un po' ambizioso: definire insieme le procedure formalmente migliori per sviluppare una applicazione.
Vorrei dire che ho letto diverse cose in giro in termini di pattern di sviluppo come MVC o MVVM, ma quello che sto cercando qui con voi non Ŕ un pattern standard e indiscutibile,  ma piuttosto un approccio semplificato alla gestione dei vari pezzi di codice, e cercare di chiarirsi sul perchŔ di alcune scelte piuttosto che altre.

Spero che interessi e di avere il vostro feedback. Alla prox. puntata!

Ciao

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1787
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 15:34
Martedý, 01/02/2011
La tua richiesta Ŕ tanto legittima quanto complessa.

Io stesso ho imparato a costruire "correttamente" un'applicazione complessa soltanto tramite lo studio di diversi manuali di software engineering (ti consiglio in tal proposito "Ingegneria del Codice" di Steve McConell) e, soprattutto, grazie a 4 anni di lavoro in team di piccola-media grandezza (da 5 a 40 programmatori) per la realizzazione di prodotti commerciali.

L'approccio che hai scelto Ŕ corretto, ma non lo Ŕ il "mezzo" cioŔ il forum.

Se vuoi una mano concreta serve un supporto pi¨ "discorsivo" (sarebbe ideale lavorare fisicamente nella stessa stanza), ma possiamo accontentarci della Chat del sito se vuoi.

Vieni a trovarmi in chat, sono spesso lý, e magari potrai aggiornare il post con i tuoi progressi man mano che lo vai sviluppando, con l'aiuto mio e di altri esperti della community.

Ciao :-)


Software Failure: Guru Meditation
Forum su Informatica, Elettronica, Robotica e Tecnologia: http://www.nonsoloamiga.com
PM Quote