Apache Commons lánc

1. Bemutatkozás

Az Apache Commons Chain olyan könyvtár, amely a felelősség láncmintáját használja - általában olyan komplex feldolgozási folyamatok szervezésére használják, amelyekben több vevő képes feldolgozni egy kérést.

Ebben a rövid cikkben egy példát mutatunk be, amely az ATM-től való visszavonást mutatja.

2. Maven-függőség

Először a könyvtár legújabb verzióját importáljuk a Maven használatával:

 commons-chain commons-lánc 1.2 

A könyvtár legfrissebb verziójának ellenőrzéséhez látogasson el ide.

3. Példa láncra

Az ATM egy számot vesz be bemenetként, és továbbítja azokat a kezelőknek, akik felelősek a különböző műveletek végrehajtásáért. Ez magában foglalja a kiadandó bankjegyek számának kiszámítását, valamint a bank és az ügyfél értesítésének elküldését a tranzakcióról.

4. Lánc kontextus

A kontextus az alkalmazás aktuális állapotát jelöli, a tranzakcióról információkat tárol.

ATM-visszavonási kérelmünkhöz a következőkre van szükségünk:

  • Visszavonandó teljes összeg
  • 100 címletjegy
  • 50 címletjegy
  • 10 címletjegy
  • A visszavonandó összeg

Ezt az állapotot egy osztály definiálja:

az AtmRequestContext nyilvános osztály kiterjeszti a ContextBase {int totalAmountToBeWithdrawn; int noOfHundredsDispensed; int noOfFiftiesDispensed; int noOfTensDispensed; int összegLeftToBeWithdrawn; // szabványos beállítók és szerelők}

5. Parancs

A Parancs veszi a Context mint input és feldolgozza.

A fent említett lépések mindegyikét a-ként fogjuk megvalósítani Parancs:

public class HundredDenominationDispenser végrehajtja a {@Override public boolean execute (Context context) parancsot a {ExcamountLeftToBeWithdrawn = (int) context.get ("summaLeftToBeWithdrawn); if (summaLeftToBeWithdrawn.Száda" / 100) }; context.put ("summaLeftToBeWithdrawn", összegLeftToBeWithdrawn% 100);} false értéket ad vissza;}} 

A Parancss for FiftyDomominationDispenser & TenDenominationDispenser hasonlóak.

6. Lánc

A Lánc egy meghatározott sorrendben végrehajtandó parancsok gyűjteménye. A mi Lánc a fentiekből fog állni Parancss és egy AuditFilter a végén:

az AtmWithdrawalChain nyilvános osztály kiterjeszti a ChainBase-t {public AtmWithdrawalChain () {super (); addCommand (új HundredDenominationDispenser ()); addCommand (új FiftyDenominationDispenser ()); addCommand (új TenDenominationDispenser ()); addCommand (új AuditFilter ()); }}

Amikor van Parancs ban,-ben Lánc igazra tér vissza, kényszeríti a Lánc befejezni.

7. Szűrés

A szűrő szintén a Parancs hanem egy postProcess metódus, amelyet a Lánc.

A mi Szűrő értesítést küld az ügyfélnek és a banknak:

public class AuditFilter implementálja a {@Override public boolean postprocess (Context context, Exception kivétel) szűrő {// értesítést küld a banknak, és a user return hamis; } @Orride public boolean execute (Context context) dobja a Kivételt {return false; }}

8. Lánc katalógus

Ez egy gyűjtemény Láncok és Parancsok logikai nevükkel.

Esetünkben a mi Katalógus tartalmazza a AtmWithdrawalChain.

public class AtmCatalog kiterjeszti a CatalogBase {public AtmCatalog () {super (); addCommand ("atmWithdrawalChain", új AtmWithdrawalChain ()); }}

9. A lánc használata

Lássuk, hogyan használhatjuk a fentieket Lánc visszavonási kérelem feldolgozására. Először létrehozunk egy Kontextus majd adja át a Lánc. A Lánc feldolgozza a Kontextus.

Írunk egy tesztesetet, hogy bemutassuk AtmWithdrawalChain:

public class AtmChainTest {@Test public void givenInputsToContext_whenAppliedChain_thenExpectedContext () dobja a Kivételt {Context context = new AtmRequestContext (); context.put ("totalAmountToBeWithdrawn", 460); context.put ("összegLeftToBeWithdrawn", 460); Katalógus katalógus = új AtmCatalog (); Parancs atmWithdrawalChain = catalog.getCommand ("atmWithdrawalChain"); atmWithdrawalChain.execute (kontextus); assertEquals (460, (int) context.get ("totalAmountToBeWithdrawn")); assertEquals (0, (int) context.get ("összegLeftToBeWithdrawn")); assertEquals (4, (int) context.get ("noOfHundredsDispensed")); assertEquals (1, (int) context.get ("noOfFiftiesDispensed")); assertEquals (1, (int) context.get ("noOfTensDispensed")); }}

10. Következtetés

Ebben az oktatóanyagban egy gyakorlati forgatókönyvet tártunk fel az Apache Apache Commons Chain könyvtárának használatával - amelyről itt olvashat bővebben.

És mint mindig, a cikk kódja is elérhető a Githubon.