În acest articol, vom explora diferitele modalități de implementare a modelului de proiectare pipeline pornind de la elementele de bază până la soluții mai complexe.
Patronul pipeline
Patronul pipeline este un model de proiectare software care oferă capacitatea de a construi și executa o secvență de operații.
Acest tipar este mai bine utilizat împreună cu tiparul plugin, pentru a construi în mod dinamic pipeline-ul la pornirea aplicației.
Secvență
Cea mai de bază implementare a unui pipeline ar fi o simplă secvență de operații.
Interfața unei operații poate fi invocată pentru a procesa datele.
Peline-ul procesează fiecare operație una câte una. Clasa pipeline-ului implementează, de asemenea, interfața IOperation, astfel încât acestea pot fi combinate.
Operația poate fi scrisă într-o clasă dedicată.
Sau se poate folosi un wrapper pentru a crea automat o operație dintr-un lambda.
Operațiile pipeline-ului trebuie înregistrate înainte ca pipeline-ul să fie invocat.
Circuit Breaker
Prima caracteristică pe care doriți să o adăugați la pipeline-ul dumneavoastră este să adăugați un circuit breaker.
Care operație va returna rezultatul : eșec sau succes.
Dacă o operație eșuează, execuția pipeline-ului ar trebui să se oprească.
Asincronă
O altă cerință ar putea fi aceea de a avea un pipeline care să poată face față operațiunilor asincrone.
Care operație va trebui acum să apeleze următoarea operație din pipeline, după ce au terminat de procesat datele.
Pipoductul este puțin mai complex, deoarece trebuie să seteze următoarea operație atunci când este înregistrată o nouă operație. O altă soluție este utilizarea unui constructor.
Această operație este asincronă și va rula într-un fir dedicat, când timpul este expirat, va invoca operația următoare pentru a continua pipeline-ul.
Operația generică poate fi utilizată atât cu o acțiune simplă, cât și cu un întrerupător încorporat dacă se utilizează o funcție.
Acest exemplu simplu folosește mai multe dintre caracteristicile pe care le-am implementat.
Acum știți cum să vă faceți pipeline-ul asincron !
Ar fi și mai bine dacă ați avea un alt callback la operația anterioară, astfel încât rezultatul să poată merge în sens invers prin pipeline.
Plugin
Motivul principal pentru a folosi modelul de proiectare a pipeline-ului este adesea cerința de a putea adăuga plugin-uri care fie vor adăuga operații la un pipeline existent, fie vor agăța o operație în mijlocul acestuia.
Pipoductul este într-adevăr de bază, dar de data aceasta, operațiile sunt expuse.
Să luăm o aplicație simplă cu un pipeline care va afișa doar cei 3 pași în consolă. Această aplicație suportă, de asemenea, plugin-uri pentru a modifica pipeline-ul.
Primul plugin va agăța o altă operație în al doilea slot al pipeline-ului.
Cel de-al doilea plugin va adăuga o nouă operație la sfârșitul pipeline-ului.
Aplicația și plugin-urile sunt puse împreună, putem invoca pipeline-ul.