Generarea de coduri, dezvoltare

Generarea de coduri, dezvoltare

"Programe de scriere a programelor" - invidia neagră ma ținut când am citit această idee în cartea "Programator-Pragmatist". Este atât de evident că puteți scrie un program care vă va scrie singur programul! De ce nu m-am gândit la această banalitate înainte? Este visul programatorului! Te trezești, apoi, în primele ore ale dimineții de 13, ai venit la locul de muncă, se întinde podele strat, ochii terne ai văzut pe butonul de ecran „genera cod“ zhmakat și totul - te duci înapoi la culcare, ziua de lucru este de peste.

Să vorbim puțin despre generatorii codului sursă, sau mai degrabă vă voi spune cât de mult le folosesc și (la propriul dvs. pericol) vor împărtăși un exemplu de text sursă.

Ce generatoare sunt

  • Pasiv - economisiți timp pentru tastare, pot fi șabloane diferite pentru fișierele sursă, de exemplu, Visual Studio va genera întotdeauna un fișier nou cu spații de nume implicite, o clasă goală etc.
  • Activ - folosit pentru a converti un fel de cunoștințe în altul. De exemplu, puteți genera o procedură de eșantionare stocată bazată pe metadatele bazei de date sau, simultan, pe întreg setul CRUD.

În opinia mea, diviziunea este mai degrabă condiționată - în ambele cazuri generăm cod care poate fi adăugat la proiect și compilat.

Ce generatoare folosesc

Mă ocup de programarea care se învârte în jurul bazelor de date, așa că am început să scriu generatoare pentru acest domeniu. Automatizarea activităților sale începe, de obicei, cu ceea ce observați pentru dvs., că pentru a cincea oară scrieți același design. Și apoi tot conduci.

Aici, de exemplu, această situație. Există un tabel într-o bază de date relațională cu trei câmpuri. Vrei, că la tine în program a fost reprezentarea înregistrării sale într-un fel de obiect. Ei bine, adică faceți o structură cu trei câmpuri și cu un nume ornate cum ar fi "TableRecordName". Și apoi, iată o infecție, hotărâți să redenumiți o coloană. Ești un apologist al unui cod frumos, te urci în structura ta și schimbi numele proprietății. Compilați-vă. Apoi se adaugă încă o coloană în tabel. Urcați în structura dvs. și adăugați o proprietate nouă. Compilați-vă. (Ei bine, cât de mult poți să faci?). Dezvoltatorul bazei de date șterge a doua coloană. Urcați în structura dvs. și ștergeți proprietatea. Compilați-vă. (Ar fi de ajuns?!). Prietenul lui Peter, care caută codul, observă: "Hmm, uite, iar tu ești aici într-o scrisoare a fost greșită, a doua coloană din litera A începe ..." (! @@ Nr.%!).

Mai aproape de punct

Aici, de fapt, cele două lucruri principale pe care generatorul le creează pentru mine sunt procedurile și clasele stocate care reprezintă o înregistrare din tabel. Codul este generat pe baza metadatelor, în MS SQL Serve este View. care sunt SystemView și încep cu INFORMATION_SCHEMA. Pentru MySql, aceasta este o bază de date information_schema. Din aceste metadate, se extrag informații despre numele coloanelor, tipurile de date, dimensiunile, relațiile și, pe baza acestora, se generează codul sursă. După cum puteți vedea, în orice limbă aveți nevoie.

Cel mai important lucru

1. Atunci când generați un cod client, de exemplu, o clasă care reprezintă o singură înregistrare într-un tabel, este important să înțelegeți că trebuie să generați un șablon și acest lucru, la rândul său, din arhitectura aleasă. Va fi acesta un "Înregistrare activă" sau "Obiect de valoare"? Depinde de arhitectura și practicile de proiectare utilizate în proiectul dvs. De aceea, am înscris la scrierea generalului de rezolvare a sute de sarcini ale generatorului și scriu mici programe, bazându-mă pe generatorul de lucru.

2. Tinerii care nu s-au obosit încă să scrie o sută de ori o singură bucată de cod, plecând de la principiul "un câine turbat și șapte găuri nu sunt verst", vor rezista la utilizarea generatoarelor de coduri. Am sugerat că un om în nenorocire măsoară cât timp va dura pentru a scrie procedurile de inserare și selecție și clasa "Obiect de valoare". Munca ia durat mai mult de 40 de minute, generatorul meu a fost ciocanit în câteva secunde. Și totuși nu la convins să folosească generatorul. Și nu este singurul caz.

concluzie

Practica generării de coduri este la fel de veche ca și lumea. Cu o sută de ani în urmă, am văzut într-unul dintre produsele Rational Software ca pe baza nici unei scheme de baze de date, dar chiar mai mare, modelul infologic. o schemă DB a fost generată sub o mulțime de dialecte, formularele fiind generate pe o grămadă de limbi. (Se pare că acesta este produsul) Și tu poți să generi ceea ce dorește inima ta. Așa cum veți vedea în codul sursă, pe care l-am prezentat pentru un exemplu, procedurile memorate CRUD + GetById sunt create acolo. codul clientului pentru depozit, "Object Value", codul pentru a apela procedurile stocate din biblioteca noastră de acces la date. În general, mașina și un cărucior mic. Există încă o generație GUI - și aplicația prototip este gata. Pentru câteva secunde.

Nu este fantastic?

P.S. Generatoarele pe care le folosesc nu elimină compilația, dar puteți automatiza și acest punct.
P.P.S. Codogeneratoarele sunt foarte simple - programare procedurală, uneori chiar govnokod (este necesar undeva să te relaxezi?)
P.P.S.S. Generatorul meu de cod pare să se potrivească cu definiția "Scofolding"

Articole similare