Úvod do JaVers

1. Prehľad

V tomto článku sa pozrieme na JaVers knižnica.

Táto knižnica pomáha programátorom skúmať a zisťovať zmeny v stavoch jednoduchých objektov Java. Keď v našom kóde používame premenlivé objekty, každý objekt je možné potenciálne upraviť na rôznych miestach v aplikácii; JaVers nám pomôže tieto zmeny odhaliť a skontrolovať.

2. Závislosť od Maven

Na začiatok pridajme javers-core Zlá závislosť na našej pom.xml:

 org.javers javers-core 3.1.0 

Najnovšiu verziu nájdeme na serveri Maven Central.

3. Zistenie zmien stavu POJO

Začnime jednoduchým Osoba trieda:

public class Osoba {private Integer id; súkromné ​​meno reťazca; // štandardní hľadači / konštruktéri}

Predpokladajme, že sme vytvorili a Osoba objekt v jednej časti našej aplikácie a v niektorých ďalších častiach kódovej základne názov osoba s rovnakým id pole bolo zmenené. Chceme ich porovnať a zistiť, aké zmeny sa stali v objekte osoby.

Tieto dva objekty môžeme porovnať pomocou znaku porovnať () metóda z JaVers trieda:

@Test public void givenPersonObject_whenApplyModificationOnIt_thenShouldDetectChange () {// uvedený Javers javers = JaversBuilder.javers (). Build (); Osoba osoba = nová Osoba (1, „Michael Program“); Osoba personAfterModification = nová Osoba (1, "Michael Java"); // when Diff diff = javers.compare (person, personAfterModification); // potom ValueChange change = diff.getChangesByType (ValueChange.class) .get (0); assertThat (diff.getChanges ()). hasSize (1); assertThat (change.getPropertyName ()). isEqualTo ("meno"); assertThat (change.getLeft ()). isEqualTo ("Michalský program"); assertThat (change.getRight ()). isEqualTo ("Michael Java"); }

4. Zistenie zmeny stavu zoznamu objektov

Ak pracujeme so zbierkami objektov, musíme podobne preskúmať zmeny stavu pohľadom na každý prvok v zbierke. Niekedy chceme pridať alebo odstrániť konkrétny objekt zo zoznamu a zmeniť tak jeho stav.

Pozrime sa na príklad; povedzme, že máme zoznam objektov, a jeden objekt z tohto zoznamu odstránime.

Táto zmena môže byť z nejakého dôvodu nežiaduca a chceme skontrolovať zmeny, ktoré sa vyskytli v tomto zozname. JaVers nám to umožňuje pomocou a compareCollections () metóda:

@Test public void givenListOfPersons_whenCompare_ThenShouldDetectChanges () {// dané Javers javers = JaversBuilder.javers (). Build (); Osoba personThatWillBeRemoved = nová Osoba (2, "Thomas Link"); List oldList = Lists.asList (new Person (1, "Michael Program"), personThatWillBeRemoved); List newList = Lists.asList (new Person (1, "Michael Not Program")); // when Diff diff = javers.compareCollections (oldList, newList, Person.class); // potom assertThat (diff.getChanges ()). hasSize (3); ValueChange valueChange = diff.getChangesByType (ValueChange.class) .get (0); assertThat (valueChange.getPropertyName ()). isEqualTo ("meno"); assertThat (valueChange.getLeft ()). isEqualTo ("Michalský program"); assertThat (valueChange.getRight ()). isEqualTo ("Michal nie je program"); ObjectRemoved objectRemoved = diff.getChangesByType (ObjectRemoved.class) .get (0); assertThat (objectRemoved.getAffectedObject (). get (). equals (personThatWillBeRemoved)) .isTrue (); ListChange listChange = diff.getChangesByType (ListChange.class) .get (0); assertThat (listChange.getValueRemovedChanges (). size ()). isEqualTo (1); }

5. Porovnanie grafov objektov

V reálnych slovných aplikáciách sa často zaoberáme grafmi objektov. Povedzme, že máme a PersonWithAddress trieda, ktorá má zoznam Adresa objekty a pridávame novú adresu pre danú osobu.

Ľahko nájdeme typ zmeny, ku ktorej došlo:

@Test public void givenListOfPerson_whenPersonHasNewAddress_thenDetectThatChange () {// dané Javers javers = JaversBuilder.javers (). Build (); PersonWithAddress person = new PersonWithAddress (1, "Tom", Arrays.asList (nová adresa ("Anglicko"))); PersonWithAddress personWithNewAddress = new PersonWithAddress (1, "Tom", Arrays.asList (nová adresa ("Anglicko"), nová adresa ("USA"))); // when Diff diff = javers.compare (person, personWithNewAddress); Zoznam objektovByChangeType = diff.getObjectsByChangeType (NewObject.class); // potom assertThat (objectsByChangeType) .hasSize (1); assertThat (objectsByChangeType.get (0) .equals (nová adresa ("USA"))); }

Rovnako bude zistené odstránenie adresy:

@Test public void givenListOfPerson_whenPersonRemovedAddress_thenDetectThatChange () {// dané Javers javers = JaversBuilder.javers (). Build (); PersonWithAddress person = new PersonWithAddress (1, "Tom", Arrays.asList (nová adresa ("Anglicko"))); PersonWithAddress personWithNewAddress = nový PersonWithAddress (1, "Tom", Collections.emptyList ()); // when Diff diff = javers.compare (person, personWithNewAddress); Zoznam objektovByChangeType = diff.getObjectsByChangeType (ObjectRemoved.class); // potom assertThat (objectsByChangeType) .hasSize (1); assertThat (objectsByChangeType.get (0) .equals (nová adresa ("Anglicko"))); }

6. Záver

V tomto rýchlom článku sme použili knižnicu JaVers, užitočnú knižnicu, ktorá nám poskytuje API na detekciu zmien stavu v našich objektoch. Nielen, že dokáže zistiť zmenu v jednoduchom objekte POJO, ale dokáže zistiť aj zložitejšie posuny v zbierkach objektov alebo dokonca grafov objektov.

Ako vždy, kód je k dispozícii na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found