ABONAMENTE VIDEO REDACȚIA
RO
EN
NOU
Numărul 150
Numărul 149 Numărul 148 Numărul 147 Numărul 146 Numărul 145 Numărul 144 Numărul 143 Numărul 142 Numărul 141 Numărul 140 Numărul 139 Numărul 138 Numărul 137 Numărul 136 Numărul 135 Numărul 134 Numărul 133 Numărul 132 Numărul 131 Numărul 130 Numărul 129 Numărul 128 Numărul 127 Numărul 126 Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 59
Abonament PDF

DSLs: soluția rapidă pentru adaptarea la un business specific

Ciprian Stupinean
Software Developer @ Ve Interactive



PROGRAMARE


În industria dezvoltării de software, problemele și rezolvările variază, dar adesea se poate observa o oarecare repetiție a lor, lucru care cauzează frustrare programatorilor. De aceea, programatorii au venit cu câteva abordări generice ca design patterns și soluții arhitecturale (arhitectural solutions). Însă chiar și în aceste cazuri repetarea aceleiași soluții arhitecturale consumă timp și creează nemulțumire. În acest context, câțiva programatori au venit cu o nouă soluție din zona Domain-Specific Language - o cale de a defini noi limbaje de programare care se concentrează pe rezolvarea unei probleme bine definite dintr-un anumit domeniu și de o mărime mică, realizând astfel dezvoltarea mai ușoară.

Ce este un Domain-Specific Language?

Un Domain-Specific Language sau (DSL) este un limbaj de programare care vizează o problemă specifică sau, cu alte cuvinte, este un limbaj care este aplicabil unui domeniu particular.

În general, multe dintre soluțiile software sunt dezvoltate folosind un limbaj de programare general (general-purpose language) precum Java, C#, C++ etc.. Pe de altă parte, un DSL este strâns legat de un anumit domeniu de aplicație, de aceea, se bazează pe o abstractizare foarte bună a problemei. În multe situații este mai ușoară folosirea unui DSL, deoarece acesta modelează foarte bine problema și toate regulile afacerii făcând astfel dezvoltarea soluției mai ușor de atins și mai puțin predispusă la erori.

Conceptul de Domain-Specific Language a fost creat pe baza observației că multe dintre problemele întâlnite în cadrul dezvoltării aplicațiilor software pot fi rezolvate mai simplu prin proiectarea unui limbaj cu scop bine definit. Un mic exemplu este "găsirea aparițiilor unui model construit dintr-un set de caractere în cadrul unui text". Pentru rezolvarea acestei probleme simple, a fost creat un limbaj cu un scop special, bine definit, cunoscut de către toți programatorii ca "expresii regulare" (regular expressions).

O modalitate de rezolvare a problemelor similare este definirea unui Domain-Specific Language în locul unui limbaj de programare general. Unul dintre avantajele folosirii DSL este faptul că se poate defini o structură bună de termeni și acțiuni pentru o anumită clasă de probleme. În continuare, vom prezenta cât de multe forme de DSL putem găsi sau implementa.

Forme de Domain-Specific Languages

Similar cu alte limbaje de programare, Domain-Specific Languages pot fi găsite sub forme multiple. În funcție de problema care trebuie rezolvată, putem folosi un DSL sub formă de text sau sub o formă grafică/vizuală.

Să vedem mai întâi cum arată un limbaj textual. Așa cum spune și denumirea, un DSL textual este un text care are definite cuvinte cheie (keywords) și o foarte bună structură pentru a rezolva o problemă de domeniu. Textul este scris de o persoană, apoi este analizat și transformat după un algoritm și reguli definite astfel încât să devină un artefact (artifact). Artefactul (care poate fi de la o bucată de cod până la o întreagă aplicație) poate fi folosit drept soluție finală pentru problemă sau în continuare în alte procese de dezvoltare.

Un exemplu de DSL textual este Gherkin, care este util pentru definirea testelor funcționale. Are o sintaxă foarte flexibilă care îl face să arate ca textul normal. Practic, programatorii, analiștii și clienții pot sta împreună la masă și defini scenarii de testare. Aceste scenarii vor fi apoi executate ca teste pentru a verifica dacă software-ul dezvoltat îndeplinește așteptările lor.

Aici este modul în care putem defini așteptările pentru retragerea de bani de la un ATM:

Scenario: Verify withdraw at the ATM works correctly
Given John has 500$ on his account
When John ask to withdraw 200$
And John inserts the correct PIN
Then 200$ are dispensed by the ATM
And John has 300$ on his account

Exemplu preluat de pe https://tomassetti.me/domain-specific-languages/

Un alt DSL foarte cunoscut este SQL, care este un limbaj utilizat pentru a defini cum sunt adăugate, modificate sau extrase datele dintr-o bază de date relațională. Aici este un exemplu cum putem extrage date dintr-o tabelă numită Books:

SELECT [Id], [Title], [Author], [Publisher],
[Description] FROM [BookStore].[dbo].[Books]

Celălalt mod de definire a unui DSL este folosirea unei forme vizuale, prin care se înțelege că problema este definită sub o formă vizuală, în multe cazuri ca diferite figuri geometrice. Atât forma textuală cât și cea grafică au avantaje și dezavantaje, dar fiecare dintre ele poate să fie folosită pentru o categorie specifică de probleme.

Limbajele grafice au totuși mai multe avantaje decât cele textuale pentru că oferă o reprezentare vizuală a domeniului problemei sub forma unor diagrame care pot fi înțelese mai ușor, dar fiecare persoană poate să prefere o formă sau alta a unui DSL.

Reprezentarea textuală este preferată de unele persoane pentru că poate să fie scrisă foarte repede și pentru momentul când vor să calculeze diferențele dintre două fișiere.

Reprezentarea vizuală este mai bună datorită rezultatului, care este de regulă, o diagramă. Aceasta este mai utilă atunci când îți dorești o imagine de ansamblu asupra problemei reprezentate de limbaj. De asemenea, este o cale mai bună de a vedea relațiile dintre entitățile problemei.

Fiecare dintre cele două forme de DSL au argumente pro și contra, dar în final ambele au un scop comun - definirea unui limbaj care să facă rezolvarea unei probleme mai rapidă.

Beneficiile utilizării Domain-Specific Languages

Folosirea DSL-urilor poate să aducă o mulțime de beneficii. Unul dintre cele mai importante și evidente avantaje este înlocuirea unei proporții însemnate de cod într-un limbaj generic, cu o formă de domain-specific language. Din momentul în care limbajul pentru un anumit aspect al dezvoltării este definit, munca devine mai eficientă datorită faptului că nu mai este nevoie de intervenție manuală.

Un alt beneficiu al folosirii DSL este calitatea sporită a produsului livrat, care constă în mai puține defecte, o arhitectură mai bună și o mentenabilitate crescută.

Un avantaj important este și faptul că validarea implementării obținute devine mai ușoară - deoarece aspectele specifice domeniului sunt neclintite, revizuirea manuală și validarea devin mai eficiente.

Nu mai puțin important în acest proces este faptul că experții în domeniu pot fi implicați mai direct. DSL-urile ale căror domenii, abstracte și notații sunt în strânsă concordanță cu modul de exprimare a experților de domeniu (non-programatori) permit o integrare foarte bună între dezvoltatori și experții domeniului.

Concluzie

Domain-Specific Languages sunt limbaje proiectate și implementate pentru un domeniu particular de aplicație. Aceste limbaje ajută la implementarea de soluții pentru domeniul respectiv prin abstractizarea problemei pentru a simplifica soluția.

Acestea au două forme principale: o formă textuală care este, în esență, un text cu o semantică bine definită și o formă vizuală / grafică reprezentată de elemente vizuale bine alese (reprezentative).

Avem de asemenea avantaje multiple prin utilizarea acestui tip de limbaje: datorită faptului că acestea se bazează pe un model de domeniu foarte bun, procesul de dezvoltare este îmbunătățit. Practic, reducerea timpului de rezolvare a unei probleme și reducerea numărului de bug-uri în îmbunătățirea colaborării globale între dezvoltatori și experți în domenii, DSL-urile reprezintă o opțiune excelentă pentru a modela procesele de implementare.

Referințe

  1. Eric Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software, Addison Wesley, 2003.

  2. Stuart Kent, Steve Cook, Domain-specific development with Visual studio DSL tools, Addison-Wesley Professional, 2007.

  3. The complete guide to (external) Domain Specific Languages

NUMĂRUL 149 - Development with AI

Sponsori

  • Accenture
  • BT Code Crafters
  • Accesa
  • Bosch
  • Betfair
  • MHP
  • BoatyardX
  • .msg systems
  • P3 group
  • Ing Hubs
  • Cognizant Softvision
  • Colors in projects