Deci ati avut ideea de a separa diferite zone, domenii AKA, ale aplicatiei dvs. utilizand Rails Engines? Ai crezut ca este o idee grozava pana cand trebuie sa comunici prin doua sau mai multe motoare?
Un exemplu de ceea ce vrei sa faci
Acest articol explica cum sa faceti aceasta comunicare si cum puteti pastra productivitatea folosind Rails si un pic de DDD.
Daca nu sunteti familiarizati cu motoarele Rails, acestea sunt instrumente excelente pentru a separa preocuparile, pentru a reutiliza codul sau pur si simplu pentru spatiile de nume.
Array
Cel mai faimos exemplu de Rails Engine este Devise. Puteti afla mai multe citind ghidurile Rails despre aceasta.
Pentru a ilustra problema, voi urmari cazul obisnuit al unui sistem bancar.
Array
Cel de motor se numeste “Contabilitate”, motorul doi se numeste “Raport de credit”. Acestea sunt doua domenii diferite ale sistemului nostru bancar. Le puteti numi „subsisteme”.
Array
Domeniul acestui sistem bancar
Motorul de contabilitate este responsabil pentru tranzactia de transfer care trebuie sa declanseze un nou raport de credit pentru conturile legate de transfer.
Deci, trebuie sa trimitem un mesaj subsistemului „Raport de credit” undeva in jurul valorii de returnarea metodei „transfer”.
Ceva asemanator cu:
Nu face asta
In acest exemplu puteti vedea mesajul trimis catre alt domeniu („CreditReport”), direct in cazul de utilizare „transfer de bani”.
- ado gay porno www.coolpropertiesbyowner.com
- porno mere www.vsgashton.net
- actrice porno americaine 1netmain.com
- actrice del porno www.digital-experts.de
- asmr porno www.todomovil.net
- alexandra daddario porno queenscitizens.com
- fitness porno sunnyscoachservice.com
- porno turc citygovernmentjobs.net
- porno en foret salvatorescallopiniresturant.com
- thai porno www.marquishoteles.com
- alpha porno isonarif.info
- porno vintage italien u-network.com
- absolum porno heartyheirlooms.com
- porno star wars richardfinancial.com
- porno mec www.inthespirit.org
- vieille francaise porno mobilsaglik.com
- film complet porno edwards-intl.net
- porno xxxxx 1-800-lead-paint.net
- agde porno lavawool.com
- porno mayotte donatelifeohio.net
- masseuse porno torontohouseforsale.com
- sophie favier porno www.welzfs.com
Acest articol s-ar putea termina aici, dar acest lucru ar duce la unele probleme: invad un domeniu cu altul care nu are o relatie puternica. Inseamna ca doua subdomenii sunt puternic conectate. Acest lucru nu este bun.
Utilizarea injectiei de dependenta
O alternativa la aceasta este injectarea subsistemului „CreditReport” in „Contabilitate”.
Acest lucru se poate face folosind o configuratie, prin setarea constantei reprezentand subsistemul Raport de credit ca sir.
Linia 8 face magia transformarii sirurilor in constante.
Si aceasta configuratie se va face in interiorul unor initializatoare din aplicatia principala (Bank). Motivul pentru care configuram folosind un sir (si obtinem constanta dinamic) este ca Rails poate folosi incarcarea automata fara probleme.
Putem schimba cazul de utilizare „transfer de bani” pentru a utiliza dependenta injectata / configurata.
Folosind versiunea injectata
Bun! Acum sistemul este mai flexibil. Exista inca un contract intre cele doua subsisteme, dar acum „Contabilitate” nu trebuie sa stie ca exista un „CreditReport” real.
Problema cu aceasta abordare este ca, daca vrem sa testam acest motor in mod izolat, va trebui in cele din urma sa depindem de motorul „Raport de credit” sau sa cream un simulator care sa reprezinte acel subsistem.
Folosirea evenimentelor
Pentru a evita o relatie puternica intre motoarele de contabilitate si rapoarte de credit, putem crea o comunicare Pub / Sub intre ele.
Ai grija:
Versiune cuplata redusa
Puteti vedea ca dependenta Raportului de credit a disparut. O noua linie intra. Aceasta linie publica evenimentul cu valoarea rezultatului.
Aceasta abordare ne permite sa configuram o clasa de abonati care primeste evenimentul si trimite mesajul catre tinta, care este subsistemul Raport de credit.
Si mesajul actual catre „Raportul de credit” intra in clasa „AccountingTransferDoneEvent”.
Aceasta clasa ar putea intra in „app / events /” in aplicatia principala.
O posibila problema cu acest lucru este ca evenimentele sunt aproape asincrone. Nu puteti verifica daca functioneaza asa cum era de asteptat in clasa editorilor. Aceasta nu este o problema daca aveti de-a face cu ceva care poate fi tratat ca un job asincron si, prin urmare, poate gestiona erorile in mod izolat.
Comunicarea intre doua domenii este foarte frecventa, iar utilizarea motoarelor Rails este usor de obtinut separarea preocuparilor, in timp ce pastram productivitatea pe care Rails ni-o aduce.
Utilizarea injectarii dependentei prin configurare faciliteaza comunicarea si ne permite sa schimbam cu usurinta implementarea dependentei. Dar este mult mai flexibil sa ai sistemul de evenimente atunci cand poti face fata mesajelor asincronizate.
Un POC care utilizeaza sistemul de evenimente poate fi gasit la https://github.com/philss/bank.








