DSL-kieletAali AlikoskiAvanade
SisältöSisältö
• Mitä DSL tarkoittaa?• Miksi ja milloin kannattaa harkita käyttöä?• Microsoft DSL Tools• Demo• Avanaden kokemuksia DSL-pohjaisista
työkaluista
Sovelluskehityksen Sovelluskehityksen tuottavuustuottavuus• IT-teollisuuden maine on huono
– Yli puolet projekteista epäonnistuu tavalla tai toisella
• Tuottavuutta, ennustettavuutta ja luotettavuutta parannettava
• Sovelluskehitysprojekteja tehdään aivan liikaa käsityönä– Virhealtista– Suuri riippuvuus yksilöistä
• Kehittäjän tuottavuus– Voi olla myös negatiivinen!
Sovelluskehityksen Sovelluskehityksen vaikeusvaikeus• Useita eri tapoja ratkaista ongelma
– Kaikki yhtä hyviä – ei ainoaa oikeaa ratkaisua– On usein löydettävissä joukko ratkaisumalleja jotka toimivat ”hyvin
yhteen”
• Suunnitelmat ja toteutus ovat liian kaukana toisistaan– Suunnittelu yhdellä välineellä ja toteutus toisilla – hajaannus on
väistämätöntä
• Oleellista on että kehitystiimi on yhtenäinen– Ratkaisee samat asiat samalla tavalla → yhtenäinen arkkitehtuuri– Noudatetaan samaa kehitysprosessia
YhtenäisyysYhtenäisyys
• Miten hyödyntää ”hyvien” kehittäjien potentiaali ja saada se muiden käyttöön?
• Asiantuntijat suunnittelevat ja toteuttavat arkkitehtuurin keskeiset osat– Muut rakentavat niiden pohjalta järjestelmän
• Eri lähestymistapoja– Framework, luokkakirjasto, yhteiset komponentit, DSL-kielet...
Software FactorySoftware Factory
• Kattotermi teollistuneelle softatuotannolle– DSL-kielet ovat osa mutta ei koko käsite
• Tapa suunnitella ja toteuttaa (myös) DSL-pohjaisesti järjestelmiä
• Mallinnus perustuen DSL-käsitteisiin– Malli ilmaisee vaatimukset riittävän tarkalla tasolla jotta siitä
voidaan generoida toimiva sovellus tai sen osia– DSL-kielet/generaattorit rakentuvat tarvittaessa frameworkien
päälle
• Yleiskäyttöisestä välineestä tarvelähtöinen spesifi työkalu– Automatisoidaan toistuva ja rutiininomainen työvaihe– Nostetaan abstraktiotasoa!
Domain Specific Domain Specific LanguageLanguage• Mikä?
– Kuvauskieli joka on tehty kuvaamaan yhden sovellusalueen problematiikkaa• Laajuudeltaan rajattu• Kuvaa sen yhden alueen hyvin• Menestyksellisiä esimerkkejä löytyy mm WinForms designer, SQL
– Sisältää sovellusalueen keskeiset käsitteet joiden varaan sovellukset rakentuvat– Käsitteiden varaan tehdystä kuvauksesta voidaan automaattisesti tuottaa
sovelluksen rakennuspalasia (koodia, konfigurointitietoja jne)
• Miksi?– DSL-toteutus määrittelee formaalit käsitteet, niiden väliset suhteet ja muut säännöt– Kehittäjät ”pakotetaan” noudattamaan DSL-toteutuksen sääntöjä ja työskentelemään
korkeamman tason käsitteillä → yhtenäisyys– Automatisoidaan rutiinityö → vähemmän inhimillisiä virheitä
• Miten?– Työkalut tukevat
Mikä on DSL?Mikä on DSL?domain specific language
generalpurpose
specific
Horizontal GUI Web Business logic Database Deployment
Vertical Telephone bills Insurance Ticketing Hardware construction
GraphicalTextualForms-basedMixed
DemoDemo
• Visual Studion valmiit mallinnuspiirteet
Factory Life CycleFactory Life Cycle
DomainKnowledgeDomainKnowledge
SolutionKnowledgeSolutionKnowledge
FactoryDevelopmentFactoryDevelopment
ProductDevelopmentProductDevelopment
Factory Schema Factory TemplateFactory Schema Factory Template
Work ProductsWork Products
Input
Produces
Feedback
ProducesInput
What is a Model?What is a Model?A representation of something, real or imagined, which hides some aspects of that thing, so that other aspects are easier to see and manipulate
A representation of something, real or imagined, which hides some aspects of that thing, so that other aspects are easier to see and manipulate
Malli → toimivaa koodiaMalli → toimivaa koodia
CustomPartial ClassesCustomPartial Classes
FrameworkPartial ClassesFrameworkPartial Classes
Config. FilesConfig. Files
Other Resources
Other Resources
käyttää
käyttää
FrameworkTools
DSLEditorDSLEditor
DSLDefinitionDSLDefinition
tuottaa
OtherEditorsOtherEditors
tuottaa
Model Files(SDM) Model Files(SDM)
ASP.NETASP.NET
GenerointivaihtoehdotGenerointivaihtoehdot
• XSLT-muunnos– Mallit ovat XML:ää
• Ohjelmallisesti DSL APIn avulla– DSL-määrityksestä syntyy tyypitetty API– CodeDOM apuna koodin generoinnissa
• Template-pohjaisesti– Ns T4 -templatekieli– Muistuttaa klassista ASPia
DSL vs perinteiset kieletDSL vs perinteiset kielet
oliopohjaisuus• Olio-ohjelmointikielet nostivat
abstraktiotasoa C:hen tai assembleriin nähden
• Kääntäjä tuottaa C-koodista assembleria
• Ei ole järkevää mennä korjaamaan kääntäjän tuotoksia, vaan parantaa kääntäjää tai C-koodia
DSL• DSL-kieli nostaa
abstraktiotasoa olio-ohjelmointiin verrattuna
• Generointi tuottaa jotain jatkojalostettua sisältöä mallista
• Ei ole järkevää mennä korjaamaan generaattorin tuotoksia, vaan parantaa generaattoria tai mallia
Mallit lähdekoodinaMallit lähdekoodina
• DSL-lähestymistavassa mallit ovat keskeinen toteutusväline– Malleista generoidaan muita jatkojalosteita– Mallit versioidaan versionhallintavälineillä (vs
malleista generoidut jatkojalosteet)
• Kaksisuuntainen generointi (round-tripping)– Jatkojalosteiden editointi suoraan ei
lähtökohtaisesti ole järkevää– Yleisenä mekanismina erittäin vaikea toteuttaa
Mihin DSL-kielet Mihin DSL-kielet soveltuvat?soveltuvat?• Tuttu domain (käsitteistö, toimintaympäristö)• Tunnetaan ratkaisu• On varaa investoida työkalukehitykseen
monistettavuuden saavuttamiseksi– Vaatii usein vähintään n 5 toistokertaa
• Halutaan saada parempi kontrolli sovelluksen arkkitehtuuriin
• Halutaan yhtenäistää kehitystyötä• Halutaan mahdollistaa kokemattomampien
kehittäjien osallistuminen kehitystyöhön
Microsoft DSL ToolsMicrosoft DSL Tools
• Visual Studio laajennosalusta• Työkalu DSL-määrityksen tekemiseen• Ajonaikainen alusta DSL-pohjaisille
työkaluille• Osa Visual Studio SDK:ta• Historia
–Ensimmäiset esiversiot 2006 keväällä VS 2005:lle
–Ensimmäinen tuotantoversio syksyllä 2006–Nykyversio Visual Studio 2008:lle
SDK mallinnusvälineiden SDK mallinnusvälineiden tekoontekoon
VisualStudio Microsoft Modeling Platform
In Visual StudioMicrosoft Modeling PlatformIn Visual Studio
DistributedSystemsDesigners
DistributedSystemsDesigners
ClassDesignerClassDesigner
DSL Tools for Visual StudioDSL Tools for Visual Studio
Your newDesignerYour newDesigner
Microsoft Modeling Platform in Visual StudioMicrosoft Modeling Platform in Visual Studio
MallinnusarkkitehtuuriMallinnusarkkitehtuuri
Domain ModelFrameworkDomain ModelFramework
Design SurfaceFrameworkDesign SurfaceFramework
TemplateEngineTemplateEngineShell
Frame-work
ShellFrame-work
ValidationFrame-work
ValidationFrame-work
In-memory graph database with rich services (e.g., transactions, serialization, rules, events, queries)
In-memory graph database with rich services (e.g., transactions, serialization, rules, events, queries)
Extensible drawing surface with support for routing and auto-layout
Extensible drawing surface with support for routing and auto-layout
Program controlled artifact generation
Program controlled artifact generation
Checks constraints and guides user to resolve issues
Checks constraints and guides user to resolve issues
Visual Studio UI integration for components like Toolbox & menus
Visual Studio UI integration for components like Toolbox & menus
Designerit Visual Designerit Visual StudiossaStudiossa
ToolboxToolbox
PropertiesWindowPropertiesWindow
ModelExplorerModelExplorer
ValidationValidation
Drawing surface with domain- specific notation
Drawing surface with domain- specific notation
HaasteitaHaasteita
Persistence Code generation
Partitioning
Parsing
Source controlPackaging
using System;using System.Collections;using System.ComponentModel;using System.Data;using System.Diagnostics;using System.Web;using System.Web.Services;
using XYZ.GapOrdering;using XYZ.GapOrdering.ClientLibrary;
namespace GapWebService{
/// <summary>/// Summary description for Service1./// </summary>public class GapService : System.Web.Services.WebService...
using System;using System.Collections;using System.ComponentModel;using System.Data;using System.Diagnostics;using System.Web;using System.Web.Services;
using XYZ.GapOrdering;using XYZ.GapOrdering.ClientLibrary;
namespace GapWebService{
/// <summary>/// Summary description for Service1./// </summary>public class GapService : System.Web.Services.WebService...
DemoDemo
• Esimerkki-DSL ja sen käyttö
Avanade ja DSLtAvanade ja DSLt
• Avandella useita DSL-pohjaisia työkaluja– Viimeisin versio Web Service Software Factoryn
kaltainen
• Käytetty projekteissa ympäri maailman• Hyödyt
– Käsityön automatisointi (koodin generointi)– Virheiden väheneminen– Arkkitehtuurin yhtenäistäminen
DSL Tools tulevaisuusDSL Tools tulevaisuus(Stuart Kentin blogista)(Stuart Kentin blogista)• Yleislinjaukset
– Graafisen designer-ympäristön ja koodigenerointialustan jatkokehitys
– DSL Tools-projektissa syntyneiden kehitysmallien yleistäminen
• VS ”Rosario”– DSL laajennokset– Domain mallin databind-tuki– Parempi sisäkkäisten kaavioelementtien tuki– Koodigenerointi osaksi buildiä
• Rosarion jälkeen– WPF-pohjainen designer– Useiden mallien linkitys toisiinsa ja tuki eri
näkymille
Yleistä pohdintaaYleistä pohdintaa
• Mikä on generoinnin rooli ja laajuus?–Koko sovellus?–Osa sovelluksesta?–Konfigurointi-informaatio?–Laajentuu ajan mittaan?
• Kuinka stabiili domain on kyseessä?–Paljonko aikaa ja vaivaa kannattaa automatisointiin uhrata?
• Useita DSL:iä per sovellus?–Eri näkökulmia (UI, sovelluslogiikka, hajautus, tietorakenteet jne)
LisätietojaLisätietoja
• Kirjoja– Software Factories– DSL Tools
• Domain-Specific Language Tools
Kysymyksiä?Kysymyksiä?
• [email protected]• blog.avanadeadvisor.com/blogs/aalialikoski