Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Software di grande dimensione

    Ciao a tutti, recentemente mi si è presentata la necessità di sviluppare un programma abbastanza complesso che deve gestire più aree del mio lavoro (clienti, collaboratori, managers, statistiche, prodotti, vendite, ecc..).

    Fino ad ora avevo sviluppato solo programmi di piccole dimensioni che non necessitavano di grande manutenzione.

    Quello che mi sto chiedendo è se c'è un modo, ed eventualmente da dove partire, per organizzare una sorta di programma modulare; un programma dove è presente una struttura di base alla quale "attaccare" vari moduli ad esempio un modulo per gestire le statistiche.

    Non so se sono riuscito a spiegarmi, ma quello che voglio ottenere è un programma di base che una volta installato, attraverso un menu permetta di installare altri moduli che si "agganciano" al programma stesso, come dei plugin oppure gli aggiornamenti di certi programmi.

    Qualche idea su come procedere?

    Fonti:
    Ho letto su wikipedia (Programmazione Modulare) che questo può essere fatto con vari linguaggi di programmazione; io sono abituato a programmare in c, ma per questo progetto pensavo di utilizzare il c#, voi che ne pensate? è la scelta giusta o è meglio optare per un altro linguaggio?

    Grazie a tutti in anticipo,
    n00bus3r.

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480

    Re: Software di grande dimensione

    Originariamente inviato da n00bus3r
    Quello che mi sto chiedendo è se c'è un modo, ed eventualmente da dove partire, per organizzare una sorta di programma modulare; un programma dove è presente una struttura di base alla quale "attaccare" vari moduli ad esempio un modulo per gestire le statistiche.
    E' possibile farlo potenzialmente con qualsiasi linguaggio.

    Originariamente inviato da n00bus3r
    Qualche idea su come procedere?
    Dipende dal linguaggio.
    Inoltre, hai già fatto una ricerca su Google in merito?

    Originariamente inviato da n00bus3r
    io sono abituato a programmare in c, ma per questo progetto pensavo di utilizzare il c#, voi che ne pensate? è la scelta giusta o è meglio optare per un altro linguaggio?
    La quasi totalità dei linguaggi consentono questo, quindi non c'è metro di giudizio per poter suggerire un linguaggio piuttosto che un altro.

    Dipende dalle tue attitudini, che nessuno può conoscere.

    E' necessario restringere un minimo il campo in modo da portare "in topic" questa discussione, altrimenti è troppo astratta e generica per poter ottenere risposte sensate.
    Leggi anche il Regolamento.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Ok, grazie per la risposta, hai perfettamente ragione.

    Il codice lo voglio scrivere in c#.

    Si, ho fatto diverse ricerche su google e ho letto alcuni articoli sulla scrittura di 'Plugin Systems' ma non ho trovato nulla di adatto o comunque completo.

    Siccome questo argomento è completamente nuovo per me, se avete qualche consiglio su qualche articolo da leggere o qualche fonte da consultare, ne sarei davvero molto felice.

  4. #4
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    torn24

    Ciao , parlo da principiante .
    ma se nel progetto usi classi diverse contenute in file diversi "parlando di c sharp"
    il programma è gia composto da più moduli ,
    se poi , queste classi le vorresti compilare come dll e collegarle al programma principale
    non avresti risolto ?
    modificando la dll , apporti delle modifiche senza ricompilare l'intero programma.
    se devono contenere solo metodi che eseguono qualche tipo di elaborazione il problema
    non sussiste .
    se poi parli di programmi che richiamano altri programmi e comunicano con questi ,la cosa
    è complicata
    Tecnologia

  5. #5
    Dunque, il concetto non era del tutto chiaro neanche per me perciò non sapevo come esprimermi (e mi dispiace per questo)... ora ho fatto qualche ricerca e sono giunto ad una conclusione di quello che mi serve ottenere:

    Programma principale: programma generico che interagisce con un database con varie query di tipo insert, select, update ecc.. contiene codice a se stante che non necessita della presenza di altri moduli, o che contiene codice comune a tutti i moduli (evito ripetizioni di codice).

    Programmi/moduli secondari: elaboratore di statistiche, gestione clienti, ecc..

    Una volta scritto il programma generale lo installo sulle macchine che ne fanno uso e da quel momento in poi può essere usato senza problemi.

    A questo punto comincio a sviluppare uno dei programmi/moduli secondari e, una volta finito lo porto sulle macchine dove ho installato la "base".

    Infine dal programma base devo poter fare una cosa tipo File>Importa modulo>'modulo', o meglio ancora posizionarmi in una cartella specifica e copiare i files necessari cosicchè al riavvio l'applicazione base si accorga dell'aggiunta e la "incorpori".

    Ho letto questo post e l'ho trovato davvero utile, rappresenta bene quello di cui ho bisogno.
    Tuttavia io devo poter aggiungere anche forms oltre che classi, qualcuno di voi ha mai sviluppato un progetto del genere? qualche consiglio su come procedere?

  6. #6

  7. #7
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Ciao, bel quesito... come dice alka non è semplice darti un buon consiglio in quanto entrano in gioco tanti fattori. Diciamo che in linea di massima, secondo la mia personalissima logica, dovresti sviluppare una "dll" (potrebbe anche non esserlo, ma per praticità...) centrale oppure comune a tutti i moduli (o plugin che si voglia), nel primo caso (centrale) intendo dire un qualcosa, come hai detto tu, che gestisce la comunicazione con la serializzazione dei dati (db), oltre a sostenere la validazione di base dei tipi e delle regole assolute, questo modulo non dovrebbe contenere nulla che non sia compatibile con le varie modalità di fruizione dei dati (per intenderci deve poter essere sfruttato sia via web che locale quindi completamente separato dal resto degli strati) e dovrebbe essere facilmente estensibile attraverso l'ereditarietà tipica di NET. Lo stesso modulo, sempre a parere mio, dovrebbe contenere un adattatore di base che fornisce funzionalità intermedie che consentono di avere le classiche funzioni di base esposte per facilitare il binding con le varie interfacce grafiche secondo le varie modalità che ad oggi ci consentono di fruire dei contenuti, per intenderci meglio, poniamo l'esempio di WPF e Silverlight (in particolare quest'ultimo nella versione 5), che con una sorta di adattatore (o ViewModel base) ti consentono di avere uno xaml sostanzialmente uguale per entranbi in modo da poter sfruttare tutta la potenza del motore di binding e traslare tranquillamente tutta l'applicazione (o suddividere in parti) dal web a locale o "desktop" + db remoto (dove possibile), grazie anche alla possibilità di migrare le funzionalità del modello verso servizi web. Ovviamente parlo di Entity Framework di ADO.NET come modello di dati, che nella sua ultima beta (4.3) include anche Entity Migration ottimo da utilizzare per portare il modello verso il web con pocchissimo sforzo (praticamente nullo!), classi POCO Code First con qualche implementazione di interfacce (tipo IValidatableObject sulle classi e IDataErrorInfo, IServiceProvider ecc. sull'adattatore-ViewModel) e un adattatore che fornisce un derivato da se stesso per i dati relazionati (child) sfruttando la reflection e il tipo (diventato per me ormai indispensabile!!!) dynamic in modo da ottenere sia il salvataggio/modifica/eliminazione ecc. sia un modo per poter filtrare i dati con query complesse direttamente nello xaml utilizzando una sintassi semplice tipo : (questo è solo un esempio, ma si possono creare query ben più complesse!)
    codice:
    {Binding Filters["Cognome.#CONFRONTO*+CONTIENE-:TXTContiene"].AND["Cognome.#CONFRONTO*+INIZIA-:TXTInizia"]} 
    oppure
    {Binding Filters["Cognome.#CONFRONTO*+CONTIENE-:TXTContiene+CASESENSITIVE:TRUE"].OR["Cognome.#CONFRONTO*+INIZIA-:TXTInizia+CASESENSITIVE:FALSE"]}
    ecc.
    dove Cognome è ad esempio una proprietà di una classe del modello (classe bindata nel datacontext da Adattatore<classe>) e TXTContiene e TXTInizia sono textbox bindate per inserire i valori (inizia e contiene) da confrontare.
    A questo punto, non rimane altro che importare la dll in qualsiasi progetto di qualsiasi tipo, e sviluppare ciò che ti serve in aggiunta in modo completamente slegato e senza aggiungere codice per le operazioni base e gestendo tutto dallo xaml attraverso binding dei comandi (ICommand) e dei dati. poi ti fai il tuo bel setup e aggiungi o rimuovi solo ciò che vuoi tu, ad esempio statistiche, operazioni aggiuntive, inserimento di alcuni dati da web ecc. lasciando sempre inalterato il modulo principale. tieni presente che in questo modo nella dll hai sempre i dati completi e aggiornati perchè serializzati in un unico db e disponibili come semplici oggetti (già valorizzati).

    considera questo dato :
    una volta sviluppato il modulo principale (l'adattatore mi ha richiesto 4 mesi ininterrotti di duro lavoro), ho potuto sviluppare un modulo aggiuntivo per il rilevamento biometrico per una determinata funzione in mezza giornata di lavoro! (ovviamente la parte dell'interfaccia e la gestione, la logica del rilevamento mi aveva portato via in passato circa 2 settimane), e il bello che l'adattatore posso riutilizzarlo con modelli differenti, quindi sostanzialmente con programmi differenti!

    oppure puoi usare le classiche interfacce comuni in una dll da importare, il classico metodo del quale trovi descrizioni ovunque nel web... oltretutto ricordo di averne parlato io stesso abbondantemente in un post con un altro utente proprio su questo forum credo nel mese di agosto scorso.

    a te la scelta.
    il mio consiglio? mmm... mi sa che si capisce!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.