PDA

View Full Version : [C#] creare un programma versatile


Maxti
05-08-2010, 15:40
Ciao,

vi spiego il problema: devo creare un progetto winforms che utilizza un activeX per mostrare a video delle immagini. Qual'è sarebbe la tecnica migliore per rendere il programma abbastanza 'generico', nel senso che se volessi utilizzare un activeX diverso non debba creare il progetto da zero?
Per esempio nell'activeX ho una funzione che fa partire la visualizzazione, ma vorrei che la stessa funzione si potesse adattare ad un altro activeX che ovviamente avrà la stessa tipologia di merodo ma con parametri diversi.

Grazie

RaouL_BennetH
05-08-2010, 16:48
Ciao :)

Ti rispondo quello che a me è stato insegnato da molti degli esperti qui sul forum. Per quanto possa sembrare paradossale (in ambito OOP), non pensare ad una "generalizzazione" prematura. Focalizzati sul realizzare quello che ti serve in questo momento. Rifattorizzando spesso il tuo lavoro, potrai individuare al meglio ciò che può essere generalizzato e crearti magari una tua libreria riutilizzabile. Questo è ciò che ti consiglio se sei, come me, in una fase iniziale in termini di conoscenze e di esperienza.

my 2 cents :)

tomminno
05-08-2010, 19:03
Ciao,

vi spiego il problema: devo creare un progetto winforms che utilizza un activeX per mostrare a video delle immagini. Qual'è sarebbe la tecnica migliore per rendere il programma abbastanza 'generico', nel senso che se volessi utilizzare un activeX diverso non debba creare il progetto da zero?
Per esempio nell'activeX ho una funzione che fa partire la visualizzazione, ma vorrei che la stessa funzione si potesse adattare ad un altro activeX che ovviamente avrà la stessa tipologia di merodo ma con parametri diversi.

Grazie

Se vuoi un software il più possibile "generico" che non sia limitato esclusivamente all'utilizzo di un singolo ActiveX (per quale scopo vorresti usare ActiveX differenti? Ma soprattutto perchè usare ActiveX per visualizzare immagini?), devi per prima cosa pensare che il tuo software è un software per la visualizzazione di immagini. Qundi pensare prima alle funzionalità che il tuo software intende esporre, visualizzazione foto singola/galleria, zoom, eventuali ritocchi (non ho idea di cosa tu voglia fare con le foto). Una volta definite le funzionalità, definirai i dati che ti sono necessari e da qui un livello Adapter verso il tuo ActiveX. Il giorno che dovrai cambiare ActiveX dovrai scrivere un nuovo strato di Adapter ma il tuo software continuerà a funzionare come prima.

Questo sempre tutto molto in generale perchè poi bisognerebbe capire meglio cosa intendi fare di preciso. E gli strumenti che hai a disposizione.

nuovoUtente86
05-08-2010, 19:14
Come ti hanno già fatto notare, più o meno esplicitamente, il principio fondamentale è quello di straficare il tuo software, facendo attenzione al fatto che ogni livello sia indipendente dagli altri. Per esaltare tale strutturazione e consentire poi la comunicazione tra le varietà entità, esistono innumerevoli modi.

Maxti
06-08-2010, 10:57
Grazie per le risposte.
In realtà non sono sicuro di adottare questa soluzione perchè mi sembra un approccio un pò complicato e essendo agli inizi mi servirebbe tempo per capire come fare e purtroppo non ne ho molto.
L'idea potrebbe essere quella di creare un interfaccia (winforms) che sia un contenitore che istanzia volta per volta l'ActiveX da utilizzare che sarà implementato all'interno di un controllo utente in una dll.
Il problema è che ogni controllo utente che andrà implementato poi nel winforms dovrà contenere gli stessi metodi, in modo che quest'ultimo veda sempre le stesse funzioni.
Però a livello di codice non ho idea di come poter fare, penso che si debba utilizzare dei metodi della classe reflection come assembly.load, ma sinceramente non conosco nulla di questo argomento, quindi penso che lascerò perdere o nel caso mi servisse un altro activex potrei pensarci in futuro.

banryu79
06-08-2010, 11:43
Il problema è che ogni controllo utente che andrà implementato poi nel winforms dovrà contenere gli stessi metodi, in modo che quest'ultimo veda sempre le stesse funzioni.

Quello che stai descrivendo qui si può esprimere con una interfaccia.
Il che riporta a quanto detto da tommino, quando ha nominato Adapter.

Una brevissima spiegazione del concetto di Adapter puoi leggerla su wikipedia, qui (http://it.wikipedia.org/wiki/Adapter).


In realtà non sono sicuro di adottare questa soluzione perchè mi sembra un approccio un pò complicato e essendo agli inizi mi servirebbe tempo per capire come fare e purtroppo non ne ho molto.

E' anche vero, però, essendo tu (per ora) poco avezzo a queste cose, e avendo poco tempo, che sarebbe meglio procedere per gradi.
In tal senso le considerazioni già fatte da RaouL_BennetH mi sembrano sensate; procedi a implementare quello che devi senza pensare troppo alla faccenda dello slegare l'interfaccia grafica dall'ActiveX specifico.

Una volta che avrai fatto funzionare il tuo programma, potrai poi pensare a "rifattorizzarlo" applicando Adapter.