Traduzione di oggetti da un tipo a un altro

2

Sto lavorando su un'app server-client in c # e devo inviare un oggetto dal client al server tramite WCF. Per semplicità lo chiamerò WorkingClass in quanto è ciò che fa il lavoro.

    public class WorkingClass 
    {
        public WorkingClass (FileInfo uncompressedFile, FileInfo compressedFile)
        {
            UncompressedFile = uncompressedFile;
            CompressedFile = compressedFile;
        }       

        public FileInfo UncompressedFile { get; private set; }
        public FileInfo CompressedFile { get; private set; }

        public void ZipFile()
        {
            //zip file
        }
    }

Ora devo inviarlo al server tramite WCF. Non ho bisogno di tutte le proprietà di WorkInfo FileInfo serializzate e inviate, quindi ho una classe semplice che chiamerò MessageClass con stringhe semplici.

public class MessageClass
    {
        public MessageClass(string uncompressedFileName, string compressedFileName)
        {
            UncompressedFileName = uncompressedFileName;
            CompressedFileName = compressedFileName;
        }

        public string UncompressedFileName { get; private set; }
        public string CompressedFileName { get; private set; }
    }

Posso aggiungere un metodo di istanza ToMessage () e un metodo statico FromMessage a WorkingClass. O invece del metodo statico FromMessage, potrei aggiungere un costruttore alla WorkingClass che accetta un MessageClass come parametro. Per me queste opzioni sembrano legare strettamente entrambe le classi e la WorkingClass dovrebbe solo preoccuparsi di zippare un file, non di convertirsi per la comunicazione tramite WCF. Creo forse una classe di convertitore?

Il server dovrà quindi convertire dal messaggio alla propria classe di lavoro.

Sono sulla buona strada per gestire questo genere di cose? C'è una buona pratica o un modello di progettazione che posso seguire?

    
posta John Petrak 20.10.2011 - 03:04
fonte

2 risposte

3

Tutti i metodi che hai menzionato sono perfettamente validi.

Il modo in cui lo guardo però:

  • MessageClass è solo per la comunicazione tramite WCF. Ciò che intendo è che hai la tua applicazione server che consiste del componente server stesso e un modo per comunicare con il tuo client che in questo caso è WCF
  • WorkingClass fa parte del componente server stesso, non dovrebbe preoccuparsi di come il client comunica con il server

Metterei il codice di conversione tra i due nel WCF usando una classe helper / converter.

    
risposta data 20.10.2011 - 05:28
fonte
0

Sembra che tu stia verificando la duplicazione del codice che ti impedisce di risolvere il problema. La classe di lavoro dovrebbe contenere un metodo che accetta un messaggio (se necessario memorizzarlo in un campo locale) Quindi la classe messaggio è l'unico tipo che deve essere serializzabile (aggiungi datacontract) e potrebbe anche essere in una libreria condivisa sul client e server.

Facendo ciò puoi esporre il file zip (MessageClass msg) come operazione a WCF (usando un'interfaccia fuori rotta) e praticamente occuperà il resto.

    
risposta data 20.10.2011 - 14:10
fonte

Leggi altre domande sui tag