Využíváte model driven architecture? rubrika: Programování: Jiné
https://cs.wikipedia.org/wiki/Model_driven_architecture
Jde mi o přehled, na jakých technolgiích to savíte? Co se vám osvědčilo?
Já osobně pracoval na projektu, kde model byl uložen v xml. V modelu nebyl jen popis rozhraní objektů, ale zároveň funkčnost. Objekty neodpovídaly přímo třídám v kódu, ale šablonám, ze kterých se generovaly unikátní nové třídy s již vyplněnýmy metodami. S ručně psaným kódem se to skládalo dědičností nebo pomocí partial class v c#. Model se editoval v našem editoru. Ne jako xml, ale jako sada diagramů a formulářů.
Už ale dělám na jiných projektech a tohle mi přijde jako dost ultimativní řešení. Používáte nějaké již hotové nástroje nebo jednodužší a efektivnější metody MDA?
Edit: 30.6.2015
Ten projekt mi neříká pane a už na něm nepracuji, takže z něho rozhodně nic sdílet nemohu. Ale pro představu jsem načrtl, co se např. mohlo objevovat v modelu. Všechno má výchozí hodnoty/funkčnosti a definuje se jen to, co se nedá předpokládat. Takže např. pokud stačí vkládací formulář vygenerovat jen podle datových položek a nepotřebuji upravovat rozmístění ovl. prvků, tak ho vůbec nedeklaruji a vytvoří se automaticky.
<screen> <name>fakturace</name> <master> <data-object>invoice</data-object> </master> <detail> <data-object>invoiceItem</data-object> </detail> <custom-menu> <menu-item> <name>pingBackground</name> <label>Tiskni růžově</label> <description> Vytiskne zobrazenou fakturu s růžovým pozadím a duhovým jednorožcem jako vodotisk. </description> <roles> <role>barbie</role> </roles> </menu-item> </custom-menu> </screen> <data-object> <name>invoice</name> <label>Faktura</name> <data-item> <name>name</name> <label>Název</label> <data-type>string</data-type> </data-item> <data-item> <name>sumPrice</name> <label>Celková cena</label> <data-type>computed</data-type> <expression><![CDATA[sum(invoiceItem.sumPrice)]]></expression> </data-item> </data-object> <data-object> <name>invoiceItem</name> <label>Položka faktury</name> <data-item> <name>name</name> <label>Název</label> <data-type>string</data-type> </data-item> <data-item> <name>quantity</name> <label>Počet</label> <data-type>float</data-type> </data-item> <data-item> <name>price</name> <label>Cena</label> <data-type>float</data-type> </data-item> <data-item> <name>sumPrice</name> <label>Celková cena</label> <data-type>computed</data-type> <expression><![CDATA[quantity*price]]></expression> </data-item> <relation>invoice</relation> </data-object>
Používám něco podobného, jak jsi použil v tom xmlku. Vypíchnul bych pár věcí:
Místo vypisování zkouším používat filtry:
Takže místo:
<domain name="Invoice"> <entry name="InvoicePreview"> <field ref="id"/> <field ref="price"/> <field ref="quantinty"/> </entry> <entry name="InvoiceFull"> <field ref="id"/> <field ref="price"/> <field ref="quantinty"/> <field ref="sumPrice"/> </entry> <entry name="InvoiceNew"> <field ref="price"/> <field ref="quantinty"/> </entry> </domain>
napíšu:
<domain name="Invoice"> <entry name="%{name}Preview"> <field-filter type="exclude">sumPrice,created*,updated*</field-filter> </entry> <entry name="%{name}Full"> <field-filter type="mask">*</field-filter> </entry> <entry name="%{name}New"> <field-filter type="exclude">sumPrice,id,created*,updated*</field-filter> </entry> </domain>
Snažím se rozdělovat definici jednotlivých fieldů, a pak jejich použití u formulářů jen odkazuji. Takže to celé bude vypadat nějak takto:
<domain name="Invoice" namespace="Taco/App"> <abstract> <field name="id" type="%{name}Identification" /> <field name="price" type="Money" mode="rw"> <doc>Dokumentační komentář</doc> </field> <field name="quantinty" type="int" /> <field name="sumPrice" type="int" /> <field name="items" type="list:InvoiceItem" mode="rw" /> <field name="created-by" type="User" /> <field name="created-when" type="Date" /> <field name="updated-by" type="User" /> <field name="updated-when" type="Date" /> </abstract> <entry name="%{name}Preview"> <field-filter type="exclude">sumPrice,created*,updated*</field-filter> <field ref="price" mode="r" /> </entry> <entry name="%{name}Full"> <field-filter type="mask">*</field-filter> </entry> <entry name="%{name}New"> <field-filter type="exclude">sumPrice,id,created*,updated*</field-filter> <field ref="price"> <label>Cena</label> </field> </entry> </domain>
Používám to na vygenerování doménových objektů/entit, ale jak říkám, zatím je to jen taková hračka.
Pro zobrazení všech 2 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře