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.