Consigli di modello di progettazione richiesti per l'invio di file xml a destinazioni diverse

1

Sto usando un modulo di esportazione, ora voglio estenderlo per connessioni diverse. Ho un database che contiene prodotti La sua descrizione, revisione, immagini ecc. Uso la funzione serialize per salvarla come file XML. Dopo averlo salvato come XML, nel pannello di amministrazione ho la possibilità di selezionare come esportare questo file XML.

ad esempio tramite ftp, http, local, webservice, email ecc. l'utente ha la possibilità di selezionare una o più connessioni per esportare i file.

Ogni connessione come ftp, http ha le proprie impostazioni nel database, ad es. dominio ftp, nome utente, password.

quale sarà il modo migliore per scrivere queste classi di connessione (implementando l'interfaccia o usando la classe Abstract o qualche gestore)

e come passarli al componente di esportazione come un exoprt può avere su molte connessioni.

    
posta user160820 04.06.2013 - 10:20
fonte

1 risposta

3

Puoi utilizzare qualcosa sulla falsariga del Pattern di fabbrica .

Un esempio per la tua situazione sarebbe sulla falsariga di

public interface IExporter
{
    void ExportXmlFile(string pathToFile);
}
public abstract class Exporter : IExporter
{
    public Exporter() { }

    public virtual void ExportXmlFile(string pathToFile)
    {

    }
}

public class ExportertFactory
{
    public static IExporter GetExporter(ExportType type)
    {
        switch (type)
        {
            case ExportType.Ftp:
                return new FtpExporter();
            case ExportType.Http:
                return new HttpExporter();
            case ExportType.Xml:
                return new XmlExporter();
            default:
                throw new Exception("Unknonw ExportType");
        }
    }
}
public enum ExportType
{
    Xml = 1,
    Ftp = 2,
    Http = 3
}

public class FtpExporter : Exporter
{
    public FtpExporter()
        : base()
    {
        //Connect to database to get FTP Settings
    }

    public override void ExportXmlFile(string pathToFile)
    {
        //Export File via FTP
    }

}
public class HttpExporter : Exporter
{
    public HttpExporter()
        : base()
    {
        //Connect to database to get Http Settings
    }

    public override void ExportXmlFile(string pathToFile)
    {
        //Export File via Http
    }
}

public class XmlExporter : Exporter
{
    public XmlExporter()
        : base()
    {
        //Connect to database to get Xml Settings
    }

    public override void ExportXmlFile(string pathToFile)
    {
        //Export File via Xml
    }
}

public class Client
{
    public Client()
    {

    }
    public void ExportFile()
    {
        IExporter exportMethod = ExportertFactory.GetExporter(ExportType.Ftp);
        exportMethod.ExportXmlFile("FilePath");
    }
}

A seconda del metodo con cui l'utente fa clic, o per ognuno di essi è possibile creare il necessario

IExporter exportMethod = ExportertFactory.GetExporter(ExportType.Ftp);
exportMethod.ExportXmlFile("FilePath");

exportMethod = ExportertFactory.GetExporter(ExportType.Http);
exportMethod.ExportXmlFile("FilePath");

linee per ognuna.

La classe astratta Esportatore è facoltativa. Puoi scegliere di mettere alcune funzionalità comuni lì per ogni tipo di esportazione. Se hai scelto di non utilizzarlo, imposta ogni implementazione concreta per utilizzare l'interfaccia, anziché la classe astratta

    
risposta data 04.06.2013 - 12:15
fonte