O biblioteca pentru definirea masinilor de stare compozibile la diagramele statice Harel si utilizarea acestora pentru a gestiona – si a testa – starea de executie a interfetei utilizator a unei aplicatii.

birocratia gestioneaza ierarhia masinilor fara chip care fac ca lumea (aplicatiei) sa se invarta.

Folosind birocratia, definiti masinile de stat cu stari enumerate, raspunzand la evenimente care declanseaza tranzitii de stare si care afecteaza lumea apeland functii de tranzitie in acele tranzitii. Va descrieti vizualizarile intr-o structura de date declarativa „arborele de vizualizare” care spune „atunci cand ierarhia masinii mele de stare se potriveste cu aceasta stare, apelati aceasta functie (pura) pentru a reda acest bit din vizualizarea mea, oferindu-i datele pe care masina de stare reuseste sa le redea “.

Masinile de stat se compun in doua moduri:

  1. Compozitia substatului: in cazul in care starea unei masini de stare „parinte” determina care dintre mai multe masini secundare „copil” este activa, astfel incat atunci cand va aflati in starea „conectat”, de exemplu, va aflati si in un set discret de sub-stari care este controlat de sub-masina „copil”. (Da, la un moment dat probabil ca ma voi gandi la o gluma decenta cu armele pentru a merge cu „mitraliera”. Intre timp, nu ezitati sa va prefaceti ca am spus ceva amuzant.)

  2. Compozitie peer: in care mai multe masini active functioneaza simultan fara o relatie de tip parinte / copil. (Harel numeste aceste „componente” – care este un termen grozav, cu exceptia faptului ca React l-a scos pentru altceva.)

Protocolul StateMachine este, de asemenea, deschis: daca doriti sa definiti un nou mod de a compune masini de stare, puteti. (Desi simtiti-va liber sa contribuiti la un PR pentru a-mi putea lua tot creditul!)

Notiuni de baza

Pe langa sectiunea Justificare de mai jos, exista un tutorial.

Exista cateva note cu privire la testare care sper ca merita citite: testez aplicatia mea bazata pe birocratie in intregime pe JVM, in teste „unitare” de testare care exercita interfata de utilizare si isi bat joc de apelurile mele AJAX pentru a efectua apeluri reale in proces catre aplicatie server reala in JVM Clojure. Cred ca acesta este un mecanism de testare puternic si simplu. Daca ati avut vreodata dificultati in testarea codului interfetei dvs. de utilizator (sau, pentru cei dintre voi care nu au facut-o, daca v-ati simtit vreodata nelinistiti de faptul ca nu testati codul interfetei dvs. de utilizator), va recomand cel putin o privire rapida la pagina Testare.

Exista, de asemenea, cateva note cu privire la depanarea interfetelor utilizator cu ajutorul inspectorului de vizualizare a depanarii birocratiei.

In cele din urma, exista cateva dezbateri in documentul Motivation, daca sunteti cu adevarat lipsit de lectura.

Atentie: aici sunt dragoni

In acest stadiu, birocratia este un cod imatur. Sper din suflet sa vi se para interesant si util si il folosesc pentru un proiect real si functioneaza bine pentru mine. Dar acest lucru este de calitate alfa, totusi, iar API-ul este cu siguranta supus modificarilor.

Justificare

Modificarea oricarei interfete cu utilizatorul are loc ca evenimente discrete: utilizatorul face clic pe linkul „cos de cumparaturi”, utilizatorul tasteaza text in campul „nume de utilizator”, apelul AJAX pentru a prelua rezultatele cautarii returneaza acest wad de date etc.

yola berrocal follando incesto ruso
fire force hentai gordibuenas españolas
ancianas españolas follando le pilla masturbandose
coños maduros comedias porno
porno con argumento maduras insaciables
sexo videos caseros maduras en castellano
españolas guarras mala rodriguez porno
comedias porno mama me folla
supertetas abuela follando con joven
penes gordos defloin.com
porbo sobando tetas
relatos sexo con maduros brazzers online
videos sexo putasfollando
me corro en su boca sin avisar mamada gay
incesto retro maturehd
abuelas incestos españolas calientes
abuelas y nietos xxx me follo a la vecina
pajas caseras videos travestis en español
paginas sexo corridas brutales en la boca
videos pornos de españolas follar con jovencitas

Intre aceste evenimente, aplicatia dvs. este (sau ar trebui sa fie!) intr-o stare stabila.

birocratia este construita pe trei teorii:

  1. Codul dvs. de redare UI (cu gestionarele sale de schimbare si apelurile sale AJAX, etc.) si testele dvs. ar trebui sa poata declansa acele evenimente in modul cel mai simplu, mai declarativ (adica bazat pe date) posibil. Modificarea modificarii aplicatiei dvs. ar trebui sa fie echivalenta cu a spune: „avand in vedere starea actuala a lumii (db) si evenimentul: actualizare care se intampla cu date: nume de utilizator„ sam ”, care este urmatoarea stare a lumii?”. Urmeaza: „OK, va rugam sa redati acest lucru ca fiind starea actuala a lumii”.

  2. Compunerea masinilor de stare este un mod simplu si eficient de a descrie comportamentul aplicatiei dvs. si va incurajeaza sa faceti acest lucru intr-un mod foarte declarativ si complet independent de modul in care paginile dvs. se redau. modelul de masina de stare compozibil al birocratiei va permite sa scrieti codul interfetei dvs. de utilizator in acelasi mod in care vorbiti despre rezultat: „cand utilizatorul este conectat, …”; „utilizatorul face clic pe„ biblioteca ”si aplicatia face X si acum se afiseaza ca fiind in modul Y”; etc. Se intampla, de asemenea, sa ajute la rezolvarea problemei cum se creeaza componente discrete (si potential reutilizabile) care nu necesita cunostinte complete despre aspectul (si coordonarea pentru a accesa) atomul de stat global, dar care, de asemenea, nu au nevoie cursoare / lentile sau legatura in doua sensuri. La fel ca o componenta React devine automat un stat local al carui ciclu de viata este gestionat in conformitate cu cel al componentei, o masina de stari intr-o ierarhie de masini de stari defineste automat ciclul de viata al starii (in sensul datelor) care traieste in timp ce lumea se afla in starile in care masina reuseste. Dar, evident, fara impenetrabilitatea urata a componentei React-stat local.

  3. Puteti descrie intregul sistem ca o combinatie de (a) o masina de stare (ierarhie), (b) o „baza de date” cu un singur atom care detine datele curente care apartin masinii de stare respective si (c) o structura de date care reprezinta vizualizarea functii care ar trebui apelate pentru a produce vizualizarea data de masina de stat si „baza de date” (birocratia numeste aceasta structura de date „arborele de vizualizare”). Daca o descrieti astfel, puteti scrie teste foarte succinte si foarte puternice – in mod traditional, unul dintre lucrurile mai dificile de facut in mod eficient in interfetele utilizatorului.

Multumiri

birocratia este puternic inspirata de discutiile lui Kevin Lynagh despre construirea de IU cu ajutorul statecharts-urilor Harel. Va puteti gandi, de asemenea, la o multime de lucruri pe care aceasta biblioteca incearca sa le faciliteze, ca o abordare usor diferita in ziua 8 / excelenta re-cadru a lui Mike Thompson – mai ales in modul in care este construit mecanismul de expediere a re-cadrului. Multe multumiri atat lui Kevin, cat si lui Mike.

Contributie / feedback

Solicitarile Pull si problemele Github sunt binevenite, indiferent daca sunt coduri concrete, sau feedback mai general de proiectare, intrebari sau ganduri aleatorii.

birocratia se afla inca in acea etapa imatura a existentei sale in care nimic nu este inca cu adevarat asternut. Daca ajungeti la feedback sau sugestii, va rog sa ma luati in considerare daca imi ia ceva timp sa ma gandesc la ele inainte de a afla cum sa le integrez in viziunea mea despre ce ar trebui sa fie birocratia.

Licenta

Copyright © 2015 Sam Roberton

Distribuit sub licenta publica Eclipse fie versiunea 1.0, fie (la alegerea dvs.) orice versiune ulterioara.