Conectarea la modelul mojolicious pentru logica de afaceri

Se ia în considerare varianta conectării automate a claselor de modele din directorul specificat.

Mojolicious - cadrul pentru scrierea aplicațiilor web, care are în arsenalul său o mulțime de funcționalități utile, așa cum se pare la început, pentru toate ocaziile. Dar când începeți să lucrați cu ea strâns și încercați să scrieți o aplicație mare, puteți să vă împiedicați în situația în care soluțiile necesare nu sunt disponibile în setul de bază. Personal pentru mine, lipsa de mojo a fost lipsa de modele în ea. În timp ce acest lucru este ciudat, această funcționalitate nu este implementată în mojo sau în plug-inuri, căutarea CPAN și în Google nu au dezvăluit plug-in-urile corespunzătoare.







În timp ce lucram cu cadrul Catalyst, sunt obișnuit cu MVC. și nu a vrut să renunțe la acest principiu de dezvoltare în mojo.

Deci, ce vrei? Vreau modele cum ar fi Catalyst, astfel încât să puteți face apeluri de la controler cum ar fi:

și că cadrul însuși încarcă toate modelele din directorul corespunzător.

În program, programatorul este cel mai solicitat să anexeze funcționalitatea necesară (de exemplu, pentru a reda modulele într-un director separat) sau pentru a scrie procesarea datelor și logica de afaceri direct în controlere. Această abordare este folosită în cadre web în alte limbi de programare, de exemplu, laravel pe php, flacără pe python și se bucură de Go.

punerea în aplicare

Deci, pentru a crea un model, sunt urmați pașii următori (vă voi arăta un exemplu de nouă aplicație):

  • Generarea aplicației mojo: mojo genera aplicația MyApp cd my_app / lib.
  • Creați fișierele și directoarele necesare: atingeți MyApp / Model.pm mkdir MyApp / Model atingeți MyApp / Model / Base.pm.
  • Regula MyApp.pm:






În fișierul MyApp.pm am creat un obiect de clasă MyApp :: Model. care a trecut obiectul curent către constructor. Este necesar un transfer către constructorul obiectului curent pentru a putea accesa apoi din model toate metodele din clasa curentă.

În MyApp / Model.pm în constructor, găsim toate fișierele din directorul MyApp / Model / utilizând clasa Mojo :: Loader și metoda de căutare. Aici este necesar să se clarifice că Mojo :: Loader nu știe cum să recupereze prin director, adică. dacă directorul MyApp / Model arată astfel:

atunci Mojo :: Loader-> search ('MyApp :: Model') va ignora directorul MoreModel și modulele de încărcare numai din directorul rădăcină. Alternativ, puteți naviga prin toate subdirectoarele din directorul rădăcină și le puteți alimenta și pe Mojo :: Loader pentru a încărca modulele.

Următorul cod. În constructorul de model, încărcăm fiecare modul cu modelul (cu excepția lui MyApp :: Model :: Base, mai departe) și îl încarcăm în modulele hash. Metoda get_model returnează o clasă corespunzătoare celei solicitate sau nu reușește cu o eroare.

În fișierul MyApp / Model / Base.pm specificăm toate metodele care vor fi moștenite de celelalte modele. Pe baza numelui, devine clar că aceasta este clasa parentală pentru modulele rămase cu modele. rând

spune că este necesar să prezentăm un element al obiectului

ca metodă de clasă. Ie apelând $ self-> app-> config este echivalent cu $ self -> -> config. Este zahăr sintactic de la creatorul de mojo.

Ce este o aplicație poate fi înțeleasă prin vizualizarea codului modulului MyApp.pm. Acesta este obiectul celei mai înalte clase MyApp.pm. pe care le-am transmis proiectantului.

Acum oferim un exemplu de modul simplu cu un model, de exemplu, MyApp / Model / MyModel.pm:

Apelați această metodă de la controlerul mai ușor:

În acest caz, se numește modelul de ajutor. definită în metoda de pornire MyApp ::. Acest ajutor va suna metoda get_model a obiectului MyApp :: Model.

Ei bine, asta e tot. După cum puteți vedea, nu este nimic deosebit de complicat. Sper că după ceva timp voi face mâna pe acest lucru sub forma unui plugin pentru mojo, deoarece am lucrat cu el recent în ultima vreme și scrierea aceluiași cod este întotdeauna obositoare. Cel puțin, proiectul despre githaba în acest caz a creat deja :)







Articole similare

Trimiteți-le prietenilor: