Praktický modelem řízený vývoj softwaru Bc. Michal Jakubec MCSE, MCSD, MCDBA, MCTS http://www.jakubec.cz/
Obsah Stručně o modelem řízeném vývoji Generativní infrastruktura na bázi XML Ukázka použití na skutečném projektu
Co nás nyní čeká? (1/3) Stručně o modelem řízeném vývoji Generativní infrastruktura na bázi XML Ukázka použití na skutečném projektu
Problémy softwarových projektů Požadavky zákazníka ? Aplikační řešení Obrázky: http://www.projectcartoon.com
Možné řešení problémů? Modelem řízený přístup Požadavky zákazníka Transformace Aplikační řešení
Proč modelem řízený přístup? Je deterministický Ušetří mnoho rutinních činností Usnadňuje údržbu a rozvoj řešení Možnost opakovaného využití na více projektech => Software Factory
Porovnání MDA a MDSD MDA MDSD Model-Driven Software Development Model-Driven Architecture přístup „shora dolů“ definováno sdružením OMG základem UML postupná transformace modelů různých úrovní abstrakce vstupem formalizované požadavky v podobě modelu výsledkem spustitelná aplikace zásadní nedostatky složitá infrastruktura chybí nástrojová podpora praktické potíže s nasazením Model-Driven Software Development přístup „zdola nahoru“ obecný přístup k vývoji aplikací založený na doménovém modelování vstupem může být model i zdrojový kód výstupem zejména zdrojový kód k překladu míra nasazení záleží na potřebách projektu lze vyvíjet souběžně i konvenčním způsobem
Hierarchie prostředků softwarového vývoje Doménově-specifické jazyky (DSL) Generování kódu Interpretace jazyka Návrhové vzory Objektově-orientovaný přístup
Generování kódu Zajišťuje automatizovanou produkci zdrojového kódu odpovídajícího stanoveným pravidlům jako řídících dat lze s výhodou použít informace zachycené pomocí DSL Zachovává konzistenci kódu při výskytu duplicitních údajů v artefaktech např. velikost textového sloupce v tabulce databáze oproti maximální délce v poli formuláře V případě, že je nutné pozměnit implementaci, stačí upravit transformační mechanismus dotčený kód bude následně re-generován či odstraněn
Doménově-specifické jazyky Zjednodušují formální zachycení struktury a/nebo chování z problémové domény Pomáhají překlenout „propast“ mezi abstrakcí problémové domény a její implementací Zajišťují centralizaci klíčových údajů (obchodních pravidel) a jejich oddělení od implementace v kódu programovacích jazyků
Interpretace DSL jazyka Umožňuje získat vysokou tvárnost aplikačního řešení bez nutnosti překladu i uživatel může měnit chování aplikace Efektivní implementace změn není nutný zásah prostřednictvím vývojového prostředí a nová kompilace kódu Vyšší nároky na architekturu aplikace možná bezpečnostní rizika nároky na výkonnost aplikačního prostředí
Mechanismus reflexe Poskytuje možnost dynamické práci s datovými typy za běhu aplikace např. práce s moduly plug-in, add-in Umožňuje datové typy obohacovat o vlastní metadata (tzv. atributy či anotace), jež lze vyhodnocovat za běhu aplikace V kombinaci s generováním kódu a interpretací DSL zvyšuje strukturální tvárnost aplikace
DSL v současné praxi Širšímu uplatnění brání: chybějící poznatky z praxe vysoké nároky na znalosti a zkušenosti vývojářů Použití vlastního DSL jazyka je většině projektů nedostupné návrh gramatiky je náročný na abstrakci složitá kontrola syntaxe problémy s vlastní interpretací jazyka Možné řešení: DSL založený na XML
Shrnutí Vývoj softwaru je rizikový byznys Modelem řízený vývoj může nabídnout pomocnou ruku a možná i východisko Potíže na projektech činí implementace vlastních DSL jazyků Jednou z dostupných alternativ může být DSL na bázi jazyka XML
Co nás nyní čeká? (2/3) Stručně o modelem řízeném vývoji Generativní infrastruktura na bázi XML Ukázka použití na skutečném projektu
Prvky generativní infrastruktury Založena na strandardech XML jako DSL jazyk doménového modelu XSD schéma pro validaci modelu XSLT pro prevod modelu na artefakty Generátor artefaktů pro generování a distribuci výsledných souboru využívá .NET Framework verze 3.5
XML jako základ DSL jazyka Jazykové konstrukce jako prvky XML snadno rozšiřitelné dle aktuálních potřeb Gramatika definována XML schématem validace zajišťuje kontrolu syntaxe Interpretace DSL jazyka prostřednictvím transformačních šablon XSLT generování kódu překlad na jiné DSL
Terminologie Artefakt – součást projektu (zdrojový kód, konfigurační soubor, záznamy dat) Doménový model – zdroj informací o prvcích domény problému/řešení Transformace – převod určitého prvku doménového modelu na sadu artefaktů Distribuce – proces fyzického umístění vygenerovaných artefaktů ve složkové struktuře souborového systému
Doménový model (1/3) Ukládán jako množina dokumentů XML validace pomocí schémat XSD – podpora IntelliSense transformace modelu pomocí XSLT podporuje generické slučování dílčích definic Umožňuje definovat strukturu doménových entit aplikační logiky Možnost specifikace výchozích záznamů pro vybrané entity
Doménový model (2/3) <?xml version="1.0" encoding="utf-8"?> <domainModel xmlns="urn:AsBest-MetaToolkit-DomainModel-1.0"> <module id="System" title="Systém" namespace="AsBest.FlexiCrm„ assembly="AsBest.FlexiCrm.Library.Domain"> <entity id="Choice" title="Číselníková položka" abstract="true" implicit="true" supportsDisabled="true"> <attribute name="Id" type="number" key="true" identifier="true" identity="true" generated="true" title="Identifikátor"/> <attribute name="Code" type="guid" selector="true" unique="true" title="Kód"/> <attribute name="Name" type="text" length="64" label="true" title="Název" entryMode="both"/> <attribute name="Description" type="text" optional="true" position="tail" title="Popis" entryMode="both"/> <attribute name="Rank" type="number" position="tail" title="Pořadí" entryMode="both"/> <attribute name="Mark" type="text" length="64" optional="true" lookup="true" position="tail" title="Značka" entryMode="both"/> <attribute name="Disabled" type="flag" position="tail" title="Zakázáno"/> </entity> </module> </domainModel>
Doménový model (3/3) <?xml version="1.0" encoding="utf-8"?> <domainModel xmlns="urn:AsBest-MetaToolkit-DomainModel-1.0"> <module id="System" title="Systém" namespace="AsBest.FlexiCrm" assembly="AsBest.FlexiCrm.Library.Domain"> <data entity="ContactGender"> <item> <value name="Id">1</value> <value name="Name">Muž</value> <value name="Mark">M</value> <value name="Rank">100</value> <value name="Disabled">False</value> </item> <value name="Id">2</value> <value name="Name">Žena</value> <value name="Mark">Z</value> <value name="Rank">200</value> </data> </module> </domainModel>
Transformační šablony Transformují doménový model na: tabulky, pohledy, referenční omezení, spouště, výchozí záznamy, aj. mapovací soubory O/R vrstvy aplikační třídy doménových entit stránky uživatelského rozhraní typu seznam- detail jednotkové testy pro doménové entity Dosud vytvořeno celkem 30 šablon XSLT některé šablony využívají jazyka JavaScript
Definice entit a záznamů Transformační šablony DEMO (1/4) Definice entit a záznamů Transformační šablony
Generátor artefaktů (1/2) Nástroj pro plně automatizované generování artefaktů dle doménového modelu univerzálně použitelný díky konfiguračním profilům Ukládání generovaných artefaktů přímo do struktury jednotlivých projektů integrováno s MS Visual Studio 2008/2010 podporuje systém pro správu zdrojového kódu Udržuje aktuální sadu artefaktů evidována v tzv. změnovém manifestu nepotřebné artefakty jsou tak vždy odstraněny
Generátor artefaktů (2/2)
Konfigurační profil generátoru Změnový manifest DEMO (2/4) Konfigurační profil generátoru Změnový manifest
Proces transformace modelu
Slučování dokumentů XML
Slučování dokumentů Expanze modelu DEMO (3/4) Slučování dokumentů Expanze modelu
Generované artefakty Databázové schéma a výchozí záznamy Mapovací soubory O/R vrstvy Aplikační třídy doménových entit Uživatelské rozhraní „seznam-detail“ Jednotkové testy pro doménové entity
Shrnutí XML jako základ DSL jazyka Doménový model pro zachycení struktury i výchozích datových záznamů Transformační šablony pro převod prvků modelu do podoby artefaktů Generátor artefaktů načítá definice modelu, transformuje je a provádí distribuci artefaktů
Co nás nyní čeká? (3/3) Stručně o modelem řízeném vývoji Generativní infrastruktura na bázi XML Ukázka použití na skutečném projektu
Vlastnosti reálného řešení Webová aplikace podnikového IS celkem cca 70 entit, 550 atributů nejprve konvenční zakázkový vývoj Použité technologie programovací jazyk C# .NET, platforma .NET Framework 3.5 O/R mapovací vrstva NHibernate 2.0 databáze MS SQL Server 2008 Generativní infrastruktura nasazena během aktivní realizace projektu
Architektura webové aplikace
Adaptace řešení do modelem řízené podoby
Ukázka UI (1/2) příklad pohledu typu seznam
Ukázka UI (2/2) příklad pohledu typu detail
DEMO (4/4) Přidání a odebrání atributu Přidání nové entity Vytvoření výchozích záznamů Úprava existující šablony
Výsledky Generováno přibližně 2300 artefaktů, z toho: 110 webových stránek seznam-detail 70 tříd doménových entit 67 databázových tabulek Jeden běh generování trvá ~30 sekund Všechny artefakty mají produkční kvalitu formátování souborů, platné jmenné konvence, aj. Veškerý generovaný kód ukládán do SVN snadný návrat ke starším revizím
Alternativní využití generátoru
Literatura Model-Driven Software Development: Technology, Engineering, Management (2006) Software Factories: Assembling Applications with Patterns, Models, Frameworks, and Tools (2004) Praktické využití konceptů generativního programování pro efektivní vývoj podnikových aplikací (Bakalářská práce, 2010)
spousta témat pro bakalářské a diplomové práce! Shrnutí Generativní infrastruktura se v praxi osvědčila došlo ke zkrácení vývojových cyklů Generovaný kód tvoří zhruba 80% kódu minimalizace úsilí Identifikovány nové podněty k dalšímu zkoumání snaha o implementaci plně dynamického IS Potenciál dalšího rozvoje generátor artefaktů, vhodná metodologie, šablony… = spousta témat pro bakalářské a diplomové práce!
Závěr Stručně o modelem řízeném vývoji Generativní infrastruktura na bázi XML Ukázka použití na skutečném projektu Dotazy?