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 #.