Introduksjon til JaVers

1. Oversikt

I denne artikkelen vil vi se på JaVers bibliotek.

Dette biblioteket hjelper programmerere å undersøke og oppdage endringer i tilstandene til enkle Java-objekter. Når vi bruker foranderlige objekter i koden vår, kan hvert objekt potensielt endres på forskjellige steder i applikasjonen; JaVers vil hjelpe oss med å oppdage og revidere disse endringene.

2. Maven avhengighet

For å komme i gang, la oss legge til javers-kjerne Maven avhengighet til vår pom.xml:

 org.javers javers-core 3.1.0 

Vi finner den nyeste versjonen på Maven Central.

3. Oppdage POJO-statlige endringer

La oss starte med en enkel Person klasse:

offentlig klasse person {privat heltal id; privat strengnavn; // standard getters / konstruktører}

Anta at vi opprettet en Person objekt i en del av applikasjonen vår, og i en annen del av kodebasen, navnet på personen med samme ID felt ble endret. Vi ønsker å sammenligne dem for å finne ut hva slags endringer som skjedde med personobjektet.

Vi kan sammenligne de to objektene ved hjelp av sammenligne() metoden fra JaVers klasse:

@Test offentlig ugyldighet givenPersonObject_whenApplyModificationOnIt_thenShouldDetectChange () {// gitt Javers javers = JaversBuilder.javers (). Build (); Personperson = ny person (1, "Michael-programmet"); Person personAfterModification = ny person (1, "Michael Java"); // når Diff diff = javers.compare (person, personAfterModification); // deretter ValueChange endring = diff.getChangesByType (ValueChange.class) .get (0); assertThat (diff.getChanges ()). hasSize (1); assertThat (change.getPropertyName ()). isEqualTo ("navn"); assertThat (change.getLeft ()). isEqualTo ("Michael Program"); assertThat (change.getRight ()). isEqualTo ("Michael Java"); }

4. Oppdage tilstandsendring av liste over objekter

Hvis vi jobber med objektsamlinger, må vi også undersøke tilstandsendringer ved å se på hvert element i samlingen. Noen ganger vil vi legge til eller fjerne det bestemte objektet fra listen, og endre tilstanden.

La oss se på et eksempel; si at vi har en liste over objekter, og vi fjerner ett objekt fra den listen.

Denne endringen kan være uønsket av en eller annen grunn, og vi vil revidere endringene som skjedde i denne listen. JaVers tillater oss å gjøre det ved å bruke a sammenligne Samlinger () metode:

@Test public void givenListOfPersons_whenCompare_ThenShouldDetectChanges () {// given Javers javers = JaversBuilder.javers (). Build (); Person personThatWillBeRemoved = ny person (2, "Thomas Link"); Liste oldList = Lists.asList (ny person (1, "Michael-programmet"), personThatWillBeRemoved); Liste newList = Lists.asList (ny person (1, "Michael Not Program")); // når Diff diff = javers.compareCollections (oldList, newList, Person.class); // deretter hevderThat (diff.getChanges ()). hasSize (3); ValueChange valueChange = diff.getChangesByType (ValueChange.class) .get (0); assertThat (valueChange.getPropertyName ()). isEqualTo ("name"); assertThat (valueChange.getLeft ()). isEqualTo ("Michael Program"); assertThat (valueChange.getRight ()). isEqualTo ("Michael Not Program"); ObjectRemoved objectRemoved = diff.getChangesByType (ObjectRemoved.class) .get (0); assertThat (objectRemoved.getAffectedObject (). get (). er lik (personThatWillBeRemoved)) .isTrue (); ListChange listChange = diff.getChangesByType (ListChange.class) .get (0); assertThat (listChange.getValueRemovedChanges (). size ()). isEqualTo (1); }

5. Sammenligne objektgrafer

I ekte ordapplikasjoner håndterer vi ofte objektgrafene. La oss si at vi har en PersonWithAddress klasse som har en liste over Adresse objekter, og vi legger til en ny adresse for den gitte personen.

Vi finner enkelt hvilken type endring som har skjedd:

@Test offentlig ugyldig givenListOfPerson_whenPersonHasNewAddress_thenDetectThatChange () {// gitt Javers javers = JaversBuilder.javers (). Build (); PersonWithAddress person = ny PersonWithAddress (1, "Tom", Arrays.asList (ny adresse ("England"))); PersonWithAddress personWithNewAddress = ny PersonWithAddress (1, "Tom", Arrays.asList (ny adresse ("England"), ny adresse ("USA"))); // når Diff diff = javers.compare (person, personWithNewAddress); Liste objekterByChangeType = diff.getObjectsByChangeType (NewObject.class); // deretter assertThat (objectsByChangeType) .hasSize (1); assertThat (objectsByChangeType.get (0) .equals (ny adresse ("USA"))); }

På samme måte oppdages det å fjerne en adresse:

@Test offentlig ugyldighet givenListOfPerson_whenPersonRemovedAddress_thenDetectThatChange () {// gitt Javers javers = JaversBuilder.javers (). Build (); PersonWithAddress person = ny PersonWithAddress (1, "Tom", Arrays.asList (ny adresse ("England"))); PersonWithAddress personWithNewAddress = ny PersonWithAddress (1, "Tom", Collections.emptyList ()); // når Diff diff = javers.compare (person, personWithNewAddress); Liste objekterByChangeType = diff.getObjectsByChangeType (ObjectRemoved.class); // deretter assertThat (objectsByChangeType) .hasSize (1); assertThat (objectsByChangeType.get (0) .equals (ny adresse ("England"))); }

6. Konklusjon

I denne raske artikkelen brukte vi JaVers-biblioteket, et nyttig bibliotek som gir oss APIer for å oppdage tilstandsendringer i objektene våre. Ikke bare det kan oppdage endringen i et enkelt POJO-objekt, men det kan også oppdage mer komplekse skift i samlingene av objekter eller til og med objektgrafer.

Som alltid er koden tilgjengelig på GitHub.


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