Conceptul de construire a logicii de afaceri, mecanica software-ului

Pentru a construi o logică de afaceri, se utilizează un model ierarhic de elemente funcționale. Adică elementul de bază al logicii de afaceri este o funcție - o componentă care este implementată folosind un obiect Command cu metoda Exec. acesta este un model tipic de design pentru comandă







Există patru clase de bază de comandă. Funcționare. Proces. Aplicație:

  1. Comanda este o logică care rulează secvențial și continuu pe partea de server
  2. Funcționarea este un caz special de comandă și este o comandă interactivă care interacționează cu clientul (clientul este orice aplicație client)
  3. Procesul este un caz special al unei operațiuni și este o operațiune de lungă durată care, din când în când, își păstrează starea curentă pe server, indiferent de durata de viață a aplicației client. Procesul are un set de stări și un anumit set de operații disponibile în această stare este legat de fiecare stat, incluzând un alt proces ca operație de proces, ca urmare a faptului că devine un subproces.
  4. Aplicația este un caz special al procesului și este un singur proces în contextul clienților. Asta înseamnă că fiecare client (aplicație client) are o copie a aplicației și singurul. În acest caz, aplicația este rădăcina aplicației. Punctul său de intrare și ieșire.

Astfel, logica de afaceri este construită sub forma unui copac cu aplicația rădăcină. un set de stări de aplicare și operații imbricate legate de aceste stări. Arborele are un număr nelimitat de niveluri.

Luați în considerare, ca exemplu, o platformă pentru desfășurarea licitațiilor, implementată ca aplicație WEB. Orice utilizator poate intra pe site, inclusiv neînregistrat pe site. Cu toate acestea, un astfel de utilizator are acces la anumite funcționalități:

Toate aceste operații sunt disponibile pentru aplicație în starea Nou, ceea ce înseamnă că procesul este pornit, dar nu are încă o instanță salvată în baza de date (sau o instanță nu a fost încă inițializată).

Restul operațiilor repetate în ambele state au sens pentru a face operații necondiționate, deoarece acestea nu depind de starea aplicației. Procesul are și această posibilitate. Adică, în acest proces, puteți scrie operații care sunt dependente de context (state-bound) și independent de context, care pot fi executate în orice stare a procesului, cel mai important, pentru a accesa procesul în sine.

Având în vedere informațiile de mai sus, puteți reconstrui arborele logicii de afaceri.

Acum vom încerca să picteze procesul de înregistrare a unui nou utilizator pe platforma de înregistrare.

Apoi întregul nostru copac va arăta astfel:

Ca rezultat, obținem un arbore care descrie întreaga aplicație, unde accesul este configurat numai pentru procesele și operațiile care rulează în primul nivel al aplicației de aplicație în starea înregistrată.

Acest arbore afișează vizual toate logica aplicației și secvența de dezvoltare a acesteia.
După proiectarea și coordonarea cu clientul, rămâne să configurați procesele și să implementați operațiunile. Operațiile sunt implementate în conformitate cu modelul de proiectare MVC, în care operațiunea funcționează ca regulator.

Rularea procesului imbricat poate apărea în mai multe scenarii:

  1. Funcția de pornire sincronă înseamnă că procesul în care procesul copil rulează în mod sincronic devine indisponibil până când procesul copilului nu își termină activitatea
  2. Startul asincron înseamnă că procesul părinte nu așteaptă încheierea copilului și oferă acces la pornirea altor subprocese.
  3. Inițierea lansării înseamnă lansarea unei subprocese dependente destinată unei alte entități, de exemplu lansarea unui proces de verificare pentru o aplicație de înregistrare destinată operatorului. Inițierea inițializării poate fi sincronă sau asincronă
  4. Startul multiplu înseamnă că puteți porni mai multe procese imbricate de același tip, în caz contrar repornirea subprocesului va avea ca rezultat accesul la un subproces deja existent.

Fiecare instanță a procesului este direct legată de entitatea care la creat sau față de care este destinat procesul. Nimeni altcineva nu poate accesa procesul. Sistemul de delimitare a drepturilor de acces cu această construcție a logicii de afaceri dobândește un nou înțeles.

  1. Apelarea unei operații sau a unei comenzi este posibilă numai dacă specificați o cale absolută pentru aceasta. De exemplu, op = Cabinet - deschideți cabinetul personal (comanda rădăcină a aplicației este omisă). Cabinetul se deschide numai dacă aplicația se află în starea înregistrată. op = Cabinet / WorkSpace - desktop-ul cabinetului personal se va deschide. Apelul la operația op = WorkSpace nu va duce direct la nimic (cu excepția mesajului "nu există acces"), deoarece Nu există o astfel de operație în interiorul aplicației și se va afișa numai atunci când operația Cabinetului este inițializată. Și, respectiv, apelați comenzile AddPanel și RemovePanel înregistrate în operațiunea WorkSpace nu reușesc, până când nu mergeți la WorkSpace
  2. Apelul procesului are loc într-un scenariu diferit. Pentru a accesa o instanță existentă a procesului, specificați tipul și ID-ul acestuia, de exemplu op = RegistrationOID = 8253. În același timp, pe partea de server, procesul aparține entității chematoare (pe câmpul Subiect în proces). Pentru a începe un proces nou, trebuie să specificați procesul părinte (cu excepția aplicației, care este întotdeauna inițializată și este un singur ton), identificatorul său și numele procesului imbricat, de exemplu op = Registration / SendRequestOID = 8253. Lansarea subprocesului SendRequest va fi posibilă numai dacă procesul de înregistrare cu OID = 8253 este deținut de utilizator și se află în starea în care este disponibilă subprocesul.






Ca rezultat, avem în același timp o modalitate de a descrie logica de afaceri și un mijloc de a delimita drepturile de acces.

Clasa de comandă este ușor de rușine. Are o metodă virtuală Exec ($ params), unde $ params este o matrice asociativă, unde cheia este numele parametrului și valoarea este valoarea parametrului. În moștenitorii clasei de comandă, în metoda Exec suprapusă, este scrisă logica. Exemple de comenzi la momentul respectiv: Tranzacție - o comandă care deschide o tranzacție, inițiază un eveniment a cărui logistică execută logicianul închide tranzacția sau se întoarce în funcție de rezultatul logicii executate

Sendmail este comanda care trimite un e-mail

Operațiunea reglementează logica afacerii mai rigid. Metoda de bază este și Exec. Dar, în moștenitori, nu se suprapune. Metoda Exec arată astfel:

Mai întâi, se face un apel către metoda virtuală Init, care înregistrează operațiile și comenzile imbricate care vor fi disponibile în cadrul acestei operații, un exemplu de implementare a metodei Init.

Această metodă este utilizată în tabloul de bord și determină ce pagini din tabloul de bord sunt disponibile. Deoarece pot exista numeroase operațiuni imbricate și fiecare operație trebuie să fie compilată și astfel numai una dintre ele va fi selectată în fiecare sesiune, este mai logic să nu se înregistreze operațiile în sine, ci obiectele proxy - comenzile care vor crea deja operații, de exemplu:

Aceasta este optimizarea performanței.

Apoi, în metoda Exec a operației, este definită o sub-operație, dacă aceasta este specificată. Consultați parametrul op. Apropo, în $ params sta $ _GET. În fiecare operație din parametrul opt apare o linie în care partea rudimentară legată de operația curentă este deja tăiată, adică În operația Aplicație, șirul op arată ca op = Cabinet / WorkSpace, iar în operațiunea Cabinetului, șirul op arată astfel: op = WorkSpace. Prin urmare, următorul cod face doar ceea ce separă calea, căutând unul imbricat între metoda înregistrată de metoda Init menționată mai sus și dacă o găsește, trece controlul asupra acesteia, tăind partea rădăcină a liniei. Dacă nu găsește o eroare. Dacă ultimul punct de referință a fost deja atins, atunci logica definită în mod prestabilit este executată. Aceasta înseamnă că se numește metoda ExecDefault. Se execută apoi metoda Run, care specifică logica care trebuie executată indiferent de variațiile căii selectate. Și dacă a apărut o eroare, vom efectua metoda HandleError, trecând textul de eroare. Procesează și mai strict reglementarea logicii, atât de dură încât nu trebuie să creezi moștenitori. Operațiile și stările disponibile sunt prescrise în baza de date, de exemplu:

În primul rând, operațiile sunt înregistrate, apoi procesele, apoi operațiile sunt legate de stările procesului. Procesul de inițiere a acestei metode se referă la baza de date, citește setările și înregistrează operațiile disponibile, nu toate, ci numai cele care sunt legate de starea actuală. Statul este determinat de OID a procesului transmis. Dacă OID nu este trecut, atunci acesta este noul proces și statul = Nou.

După cum am raportat deja, nu suprapunem clasa Process în stratul logic de afaceri, cu excepția clasei Application. Acesta este inițializat fără OID, prin comunicarea cu utilizatorul curent și prin redarea paginii însăși, spre deosebire de procesul în care pagina generată returnează funcția care a provocat-o. Aplicația-n-au niciun loc pentru a returna pagina, așa că e ecou.

Deoarece aplicația și procesul sunt autosuficiente, dezvoltarea operațiilor și a comenzilor rămâne. Dezvoltarea echipelor de mai sus a fost deja raportată. Trebuie doar să înlocuiți metoda Exec, așa că vom examina detaliat evoluția operațiunilor. Să facem asta pe exemplul administratorului.

Creați operația de administrare. Atașați-o la aplicație în starea înregistrată. Accesul la acesta ar trebui să fie primit numai de administratorul de sistem. Există două modalități pentru aceasta:

  1. În metoda Init, apelați o procedură stocată care va verifica dacă utilizatorul este un administrator și, dacă nu, creați o excepție.
  2. Conectați operația la proces prin condiție, adică adăugați Conditon (IsAdministrator) în pachetul de proces-stare-operație. Apoi toți cei care nu sunt administratori nu vor avea acces la operație

Alegem prima metodă (pur, de exemplu, pe practică am implementat a doua metodă).

1. Înregistrați-o în baza de date.

2. Creați clasa Administrație în PHP, moșteniți din Operație

Înlocuiți metoda Init

Obiectul exploatare copil oferă acces la orice acțiune a oricărui obiect, acesta trebuie implementat. Dar va fi mai departe, iar acum vom continua să punem în aplicare Administrația Operației. Ce ar trebui să facă această operație în mod implicit? Probabil, afișați o listă cu toate clasele.

Să închidem metoda ExecDefault.

Aceasta este, în mod implicit, operația Obiect va fi apelată, care va apela acțiunea obiectului Listă. Și clasa obiectului - Class, adică deducem lista de obiecte de tip Class. Acum trebuie să suprascrieți metoda Page, care va afișa html pe ecran.

Presupunem că pagina va forma întotdeauna o operație imbricată.

Nu voi detalia funcționarea operației Obiect, voi scrie pur și simplu cuvintele pe care ar trebui să le reprezinte. Deoarece ierarhia logicii de afaceri este unul dintre straturile MVC, al doilea este un strat de entități de afaceri și interfață. Cum este structurat stratul Entității de Afaceri pe care deja îl cunoașteți. Aceasta este o ierarhie a clasei entităților de afaceri și fiecare are un set de acțiuni Edit, Creare, Vizualizare, Ștergere, Imprimare etc. Aceasta înseamnă că metoda Init a operației Obiect trebuie să creeze o instanță a clasei entității de afaceri și să obțină o listă de acțiuni din ea. Acțiunea bazei acțiunii este succesorul operației. Metoda Exec ar trebui să selecteze această acțiune. Astfel, tipul de comandă op = Admin / Object / EditOID = 1234 creează operațiune Admisitration (dacă este disponibilă), apoi a crea obiecte opreatsii, care va crea o entitate găsită în parametrul OID și de a efectua acțiunea Editare. Pentru a crea un nou obiect sau prin apelarea acțiunii de clasă, nu trebuie să specificați OID, și de clasă, de exemplu, op = Admin / obiect / Createclass = Observații sau op = Admin / obiect / listclass = Licitație.







Trimiteți-le prietenilor: