Calcolo delle differenze degli oggetti e delle azioni necessarie per la riconciliazione

0

Dato che ho un tipo che chiameremo Person definito come

// psuedo code
Person {
    Name: string;
    Age: int;
    Friends: Person[];
    Career: Career // black box and assume that Career 
                   // is a type with a few arbitrary properties
}

Dato che ho due istanze del tipo Person , chiameremo p1 and p2

p1 è pieno di informazioni come Name = "jim" e Age = 16 e p1.Friends = [3 other Person references]

e p2 sono riempiti con informazioni diverse come Name = "bill" e Age = 21 e p2.Friends = [5 other Person references]

Ora, se volessi trasformare p1 in p2, ci sarebbe una serie di azioni CRUD come:

p1.UpdateName("bill")
p1.UpdateAge(21)
p1.DeleteFriend(friends[i]) //For each of the current friends in p1 that are not in p2
p1.CreateFriend(newFriends[j]) //For each of the friends in p2 that are not in p1  

E ora i dati in p1 sono uguali ai dati in p2.

È abbastanza facile prendere due oggetti di uno specifico tipo noto, calcolare la differenza tra loro e produrre un insieme di azioni distinte che trasformeranno un oggetto nell'altro, vorrei generalizzare questo flusso di lavoro in un modo che è progettato per permetterci di diffondere facilmente molti diversi tipi di oggetti e produrre un insieme comune di azioni che possono trasformare qualsiasi istanza di un tipo particolare in qualsiasi altra istanza dello stesso tipo.

La mia domanda è:

Esiste una soluzione esistente (libreria o progettazione comune) che risolve ciò che sto tentando di fare?  Rappresenterà oggetti profondamente annidati? Come nell'esempio, ho la proprietà della carriera nel tipo Persona e Se ci fossero delle differenze, dovrei calcolare anche le azioni per questo.

Non voglio provare a reinventare la ruota su questo se è stato fatto meglio, semplicemente non so cosa cercare in google quando si tratta di capire questo design.

Se aiuta a tutto ciò che la lingua di destinazione è C #.

    
posta tt9 13.07.2017 - 16:40
fonte

1 risposta

1

Quello che stai cercando di determinare è chiamato delta minimo di albero degli oggetti. Cercando su Google in cerca di questi termini, si ottiene questo articolo che dovrebbe farti andare nella giusta direzione.

    
risposta data 13.07.2017 - 16:56
fonte

Leggi altre domande sui tag