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.