Esistono schemi di serializzazione per OOP che includono metodi o operazioni nel contratto oltre alla struttura dei dati?

0

Quindi tipicamente creiamo schemi, mime-tipi, ecc. per i nostri oggetti quando comunichiamo con un altro sistema sugli oggetti.

Il documento di solito definisce la struttura dei dati degli oggetti per scopi di serializzazione senza registrazione dei metodi dell'oggetto. Tutto quello che mi rimane sul client sono in effetti delle strutture senza metodi.

Quindi per esempio diciamo che ho più classi e diciamo quelle incluse un Account e un Ordine. Specifichiamo anche che gli ordini sono legati a un account. Ora diciamo che ho un cliente che vuole recuperare un certo ordine relativo ad un account da un servizio distribuito che fornisce queste informazioni. Potrei codificare tutta la ricerca, la scansione e altri tipi di logica nel server distribuito e fare in modo che il client si basi su di esso per tutto ciò che potrebbe voler fare (RPC estremo). Potrei semplicemente scrivere il codice per scansionare i grafici degli oggetti sul client, costringendo ogni cliente con un tipo di interesse a replicare il codice. Potrei creare una libreria che contiene funzioni comuni. Ma quello che mi piacerebbe davvero, è la possibilità di replicare i metodi sull'oggetto al client come parte del contratto. Il client non solo conosceva la struttura dati dell'oggetto distribuito, ma poteva anche richiamare ed eseguire operazioni sull'oggetto che era stato distribuito con esso.

Esiste un sistema là fuori che serializza operazioni \ codice insieme alla struttura dati per gli oggetti? Idealmente non dovrebbe essere solo uno stub del client RPC che richiama le operazioni su un server.

    
posta Peter Smith 25.09.2014 - 16:32
fonte

1 risposta

2

Penso che la ragione per cui questo non viene fatto più spesso è perché stai inviando il codice insieme ai tuoi dati, e quindi non hai più il controllo totale sul codice. Mantenere la sicurezza delle operazioni sarebbe una vera sfida. Questo non è vero per i dati, perché puoi disinfettare, convalidare e autorizzare i dati, usando un codice che puoi controllare e proteggere.

Anche il codice non è omogeneo, allo stesso modo dei dati. Molti linguaggi e tecniche di programmazione differenti sono usati per creare sistemi di elaborazione dati, ma i dati rimangono essenzialmente nella stessa forma. Questo è particolarmente vero per i dati XML. I dati XML sono specificatamente progettati per essere indipendenti dal sistema; puoi elaborarlo su qualsiasi sistema con e lettore XML.

Se vuoi cercare un esempio di codice dal vivo come dati, non devi guardare oltre Lisp. Lisp ha una profonda filosofia di "codice come dati". In "La natura di Lisp", l'autore ha spiegato questa distinzione sottolineando che puoi tradurre qualsiasi linguaggio di programmazione in XML, trasmetterlo via cavo ed eseguirlo:

<define-function return-type="int" name="add">
    <arguments>
        <argument type="int">arg1</argument>
        <argument type="int">arg2</argument>
    </arguments>
    <body>
        <return>
            <add value1="arg1" value2="arg2" />
        </return>
    </body>
</define>

Quindi tutto ciò che devi fare è inviare il codice sorgente nel tuo oggetto trasmesso, compilarlo sul bersaglio ed eseguirlo contro i tuoi dati incapsulati. :)

La tua "serializzazione di codice" si riduce quindi a "includere il codice sorgente necessario per elaborare questo oggetto con ogni pacchetto di dati che invii". Penso che tu possa vedere come questo può diventare rapidamente molto ingombrante. Se stai per trasmettere programmi a un sistema remoto che opererà sui dati che hai inviato, ha più senso trasmettere questi programmi al sistema remoto prima del tempo, installarli, eseguirli e quindi invia i tuoi dati.

    
risposta data 25.09.2014 - 16:55
fonte

Leggi altre domande sui tag