Bevezetés a JaVers-be

1. Áttekintés

Ebben a cikkben megnézzük a JaVers könyvtár.

Ez a könyvtár segít a programozóknak megvizsgálni és észlelni az egyszerű Java objektumok állapotának változását. Ha módosítható objektumokat használunk kódunkban, minden objektum potenciálisan módosítható az alkalmazás különböző helyein; JaVers segítene bennünket felfedezni és ellenőrizni ezeket a változásokat.

2. Maven-függőség

A kezdéshez adjuk hozzá a javers-core Maven függőség a mi pom.xml:

 org.javers javers-core 3.1.0 

A legújabb verziót megtalálhatjuk a Maven Central oldalon.

3. POJO állapotváltozások észlelése

Kezdjük egy egyszerűvel Személy osztály:

nyilvános osztály Személy {magán egész szám; privát karakterlánc neve; // szokásos szerelők / kivitelezők}

Tegyük fel, hogy létrehoztunk egy Személy objektum az alkalmazásunk egyik részében, a kódbázis másik részében pedig a az azonos azonosítójú személy mező megváltozott. Összehasonlítani szeretnénk őket, hogy megtudjuk, milyen változások történtek a személy objektummal.

Összehasonlíthatjuk ezt a két objektumot a összehasonlít () módszer a JaVers osztály:

@Test public void givenPersonObject_whenApplyModificationOnIt_thenShouldDetectChange () {// adott Javers javers = JaversBuilder.javers (). Build (); Személy személy = új Személy (1, "Michael Program"); Person personAfterModification = új személy (1, "Michael Java"); // amikor Diff diff = javers.compare (person, personAfterModification); // majd ValueChange változás = diff.getChangesByType (ValueChange.class) .get (0); assertThat (diff.getChanges ()). hasSize (1); assertThat (change.getPropertyName ()). isEqualTo ("név"); assertThat (change.getLeft ()). isEqualTo ("Michael Program"); assertThat (change.getRight ()). isEqualTo ("Michael Java"); }

4. Az objektumlista állapotváltozásának észlelése

Ha objektumgyűjteményekkel dolgozunk, hasonlóképpen meg kell vizsgálnunk az állapotváltozásokat a gyűjtemény egyes elemeinek megnézésével. Néha fel akarjuk venni vagy eltávolítani az adott objektumot a listáról, megváltoztatva annak állapotát.

Nézzünk meg egy példát; mondjuk van egy objektumlista, és eltávolítunk egy objektumot a listáról.

Ez a változás valamilyen okból nemkívánatos lehet, és ellenőrizni szeretnénk a listában bekövetkezett változásokat. A JaVers lehetővé teszi számunkra, hogy ezt a összehasonlít Gyűjtemények () módszer:

@Test public void givenListOfPersons_whenCompare_ThenShouldDetectChanges () {// adott Javers javers = JaversBuilder.javers (). Build (); Person personThatWillBeRemoved = new Person (2, "Thomas Link"); List oldList = Lists.asList (új Személy (1, "Michael Program"), personThatWillBeRemoved); List newList = Lists.asList (új személy (1, "Michael nem program")); // amikor Diff diff = javers.compareCollections (oldList, newList, Person.class); // majd assertThat (diff.getChanges ()). hasSize (3); ValueChange valueChange = diff.getChangesByType (ValueChange.class) .get (0); assertThat (valueChange.getPropertyName ()). isEqualTo ("név"); assertThat (valueChange.getLeft ()). isEqualTo ("Michael Program"); assertThat (valueChange.getRight ()). isEqualTo ("Michael nem program"); ObjectRemoved objectRemoved = diff.getChangesByType (ObjectRemoved.class) .get (0); assertThat (objectRemoved.getAffectedObject (). get (). egyenlő (personThatWillBeRemoved)) .isTrue (); ListChange listChange = diff.getChangesByType (ListChange.class) .get (0); assertThat (listChange.getValueRemovedChanges (). size ()). isEqualTo (1); }

5. Objektumgrafikonok összehasonlítása

Valódi szóalkalmazásokban gyakran foglalkozunk az objektumgrafikonokkal. Tegyük fel, hogy van egy PersonWithAddress osztály, amely rendelkezik a Cím objektumokat, és új címet adunk hozzá az adott személyhez.

Könnyen megtalálhatjuk a bekövetkezett változás típusát:

@Test public void givenListOfPerson_whenPersonHasNewAddress_thenDetectThatChange () {// adott Javers javers = JaversBuilder.javers (). Build (); PersonWithAddress person = new PersonWithAddress (1, "Tom", Arrays.asList (új cím ("Anglia"))); PersonWithAddress personWithNewAddress = new PersonWithAddress (1, "Tom", Arrays.asList (új cím ("Anglia", új cím ("USA"))); // amikor Diff diff = javers.compare (személy, személyWithNewAddress); List objektumokByChangeType = diff.getObjectsByChangeType (NewObject.class); // majd assertThat (objectByChangeType) .hasSize (1); assertThat (objectByChangeType.get (0) .equals (új cím ("USA"))); }

Hasonlóképpen egy cím eltávolítását is észleli:

@Test public void givenListOfPerson_whenPersonRemovedAddress_thenDetectThatChange () {// adott Javers javers = JaversBuilder.javers (). Build (); PersonWithAddress person = new PersonWithAddress (1, "Tom", Arrays.asList (új cím ("Anglia"))); PersonWithAddress personWithNewAddress = new PersonWithAddress (1, "Tom", Collections.emptyList ()); // amikor Diff diff = javers.compare (személy, személyWithNewAddress); List objektumokByChangeType = diff.getObjectsByChangeType (ObjectRemoved.class); // majd assertThat (objectByChangeType) .hasSize (1); assertThat (objectByChangeType.get (0) .equals (új cím ("Anglia"))); }

6. Következtetés

Ebben a rövid cikkben a JaVers könyvtárat használtuk, egy hasznos könyvtárat, amely API-kat ad nekünk az objektumunk állapotváltozásának észlelésére. Nem csak egy egyszerű POJO-objektum változását, hanem az objektum-gyűjtemények vagy akár az objektumgrafikonok összetettebb elmozdulásait is képes észlelni.

Mint mindig, a kód elérhető a GitHubon.


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