Originariamente inviato da pietro09
Cerco di farmi, in vb.net e in c#, una serie di procedure per manipolare le immagini: leggerle, ridimensionarle, salvarle.
Alla fine mi accorgo che il problema non sta nelle procedure ma nella loro struttura.
Per esempio, la procedura ImgSave, mi salvava l'immagine su disco o sullo stream di uscita, solo in base ad un argomento immagineOutput
In questo caso specifico, non penso ci sia un difetto di progettazione, visto che l'esigenza che poni è un normalissimo problema che si affronta quotidianamente.

Dal mio punto di vista, hai due soluzioni: potresti semplicemente creare due procedure con nome diverso che espliciti il diverso "media" di destinazione, oppure sfruttare l'overloading di funzioni, se presente nel linguaggio adottato.

Esemplificando, potresti creare due metodi ImgSaveToFile e ImgSaveToStream che accettino parametri differenti in base al mezzo in cui salvare, oppure creare due funzioni con lo stesso nome che abbiano parametri differenti, uno il percorso del file in cui salvare, l'altro il riferimento all'oggetto "stream" che deve ottenere l'immagine, se il linguaggio supporta l'overloading.

In generale, io non sono un maniaco dell'overloading, che uso solo in ambiti specifici; ad esempio, non sopporto quei casi, frequenti nella FCL del .NET Framework, in cui uno stesso metodo può comportarsi in modi radicalmente differenti, tutti raggruppati in metodi con lo stesso nome, decine di versioni diverse dello stesso nome di metodo in overload: sarebbe quasi più comodo averne uno specifico per ogni esigenza, così da consentire all'IDE di suggerire solamente quei parametri che sono propri dell'implementazione che si vuole utilizzare.

Concludendo, la risoluzione al tuo problema si ottiene, secondo me, con una delle due metodologie indicate. Mentre la prima è possibile in qualsiasi linguaggio, anche in forme analoghe ad un metodo (es. procedura), la seconda vale solo in quei linguaggi che supportano l'overloading, tra cui C# e VB.NET che sono quelli che utilizzi, e tantissimi altri (Delphi, C++, ecc.).

Ciao!