\

Školení Návrhové vzory, OOP a UML


 Tuesday, April 27, 2004
Seminář o BizTalku

Dneska jsem skoro celý den strávil na semináři o BizTalku 2004. Dorazil jsem sice s hodinovým zpožděním, protože jsem ráno musel na tradičně neodkladnou analytickou schůzku  se zákazníkem, ale díky ní jsem nakonec přišel o zahajovací  marketingovou masáž. Štestí v neštěstí. Celý dnešní blok přednášek byl zajímavý, i když vzhledem k rozsahu tématu a nutnosti vysvětlit jej v pouhých dvou dnech je citelně znát, že přednášející odříkává své věty  v presu a že všechny vlastnosti BizTalku bez ohledu na jejich složitost musí vysvětlit na jednom zjednodušujícím slidu prezentace. Škoda, ale samostudium technologií je stejně dobrodružnější. ;)

Na BizTalku je nejzajímavější abstrahování od nízkoúrovňových implementačních záležitostí, jakými jsou ruční návrh XSD schémat nebo infrastruktura pro business procesy. Ve vizuálním režimu se dá navrhnout většina typických transformací a translací dat, je snadné rychle rozehrát sladěný orchestr různých business procesů, aniž bych musel měsíce trávit vývojem a testováním potřebných komponent.

Kdy a proč jsem se začal o BizTalk zajímat? Prvotním motivem bylo zjištění, že naší zákazníci si pod pro mě jednoznačnou zkratkou CRM představují systém, do nějž budou integrována všechna jejich data z přehršle různých systémů pracujících nad různými databázemi, které si každé oddělení firmy nechalo z vlastní ďábelské iniciativy vyvinout. Když ale chce top management firmy vidět souhrnná data o zákaznících ze všech systémů, tak se teprve ukáže, že ďábelská iniciativa nezbytně formuje jen celofiremní SW peklo. Jak data ze systémů získat? Kam je uložit? Jak zajistit jejich konzistenci? Není lepší datové sady i za cenu vyšší časové náročnosti integrovat online na požádání uživatele? To jsou jen jemné náznaky nepříjemných problémů čekajících na řešení.

Pro náš CRM systém E-Dirigent jsem navrhl snadno rozšiřitelnou vrstvu datových konektorů s jednoduchým veřejným rozhraním, ve které jsou všechny rozdíly při komunikaci s heterogenními datovými zdroji centralizovány, a zbylé vrstvy aplikace si nejsou vědomy, že komunikují například s WWW službou místo s výchozím MSSQL serverem. Problémy, které se musí řešit při online komunikaci s datovými zdroji nejsou příjemné - jen namátkou:

  1. Jak provést JOIN nad zdrojem, jenž JOIN nepodporuje?
  2. Co s agregačními funkcemi, které mají pracovat nad více datovými zdroji?
  3. Jak zajistit aktualizaci údajů napříč datovými zdroji v jediné transakci?

Nakonec funkční a relativně jednoduchý návrh vznikl. Protože si ale samozřejmě nemůžeme dovolit vyvinout úplně univerzální řešení, tak je návrh prošpikován kompromisy (tohle slovo opravdu nemám rád), a proto jsem se stále více přikláněl a přikláním k tomu, že na takové záležitosti je lepší u zákazníka nasadit vyzkoušený a fexibilní BizTalk. Mohu se ale mýlit. Budu rád, když mě poučí někdo, kdo BizTalk na Enterprise integrace používá. Je vůbec v Čechách někdo takový?



Tuesday, April 27, 2004 8:52:00 PM (Central Europe Standard Time, UTC+01:00)       
Comments [4]  Biztalk


UML 2.0 - zastavení první

Se snad blížícím se datem uvolnění  finální verze 2.0 jazyka UML je myslím přínosné popsat mé první zkušenosti s novou verzí. Myslím, že se druhá verze jazyka UML stejně jako verze 1.0 stane nepřehlédnutelným periodizačním mezníkem v oblasti analýzy a vývoje softwaru. S uvedením první verze jazyka UML v roce 1996 skončilo neplodné období válek mezi vzájemně se potírajícími  metodikami a jejich občas málo soudnými tvůrci, kteří by pravděpodobně nejraději své výtvory šířili s pěnou "u huby" ohněm i mečem. Málokdo také tušil, že UML předznamenává novou epochu. Epochu, v níž znalost UML je povinností nejen pro analytiky a designéry, ale alespoň pasivní znalost se předpokládá také u  vývojáře, jehož nejvyšší pracovní ambicí není kreativní psaní formulářů na editaci číselníků. Nic na tomto světě není nikdy perfektní a i pro UML po sérii dílčích vylepšení, jež vyústily ve verzi 1.5, nadešel čas na nový velký "release“ zaměřený na zacelení dlouhodobě pociťovaných mezer ve specifikaci, které se staly neblahým impulsem pro vznik proprietárních rozšíření. Tato rozšíření se zaměřovala hlavně na silnější podporu analytika modelujícího dynamické chovaní systémů. Three amigos vrací úder a odvrací hrozbu nového vysilujícího souboje disparátních specifikací vylepšeními ve verzi 2.0 jazyka UML. Vylepšeny byly nejen diagramy pro dynamické chování, ale byly také přidány zcela nové diagramy (Composite structure diagram, Timing diagram,  Interaction overview diagram) a rozšířeny takřka všechny ostatní a z verzí 1.x známé strukturní prvky.

Dnes se podíváme na vylepšení případů užití (Use Case), ve kterých ale k žádným velkým změnám nedošlo, protože jejich hlavním účelem  je vizualizovat funkční rozsah systému pro zákazníka a tak by příliš mnoho fines, ornamentů a vychytávek mohlo smysl diagramu spíše zatemnit. Případy užití jsou  přesto ve verzi 2.0 více provázány s ostatními diagramy, aby model systému působil kompaktnějším dojmem.

  1. Kromě seskupování případů užití do balíčků, je možné je nyní seskupit v klasifikátoru. Toho využijeme například tehdy, když budeme psát informační systém pro velkou společnost a v modelu bude klasifikátor divize vyjadřující rozdělení společnosti do menších celků. Jestliže se liší případy užití realizované zaměstnanci různých divizí, například divize finanční a divize technologické, můžeme z důvodu větší názornosti klasifikovat případy užití jejich seskupením pod jednotlivé divize.
  2. U vztahu Extend mezi případy užití je doporučeno zachytit podrobnosti rozšíření v poznámce (Note). Poznámka by měla mít strukturu:
    Condition:[Podmínka, při které nastane rozšíření]
    Extension Point:[Bod rozšíření]
  3. Když případ užití obsahuje větší množství bodů rozšíření, je možné pro jeho vyjádření použít alternativní symbol. Symbolem je obdélník, který je rozdělen nepřerušovanou čarou na dvě části. V horní části je jméno případu užití a ovál, který je tradičním symbolem případu užití. Ve spodní části se nachází seznam bodů rozšíření.
  4. Případ užití může nyní  “vlastnit” jiný diagram. Příkladem může být stavový diagram popisující průběh vyřizování objednávky u případu užití s názvem zpracování objednávky. Vložené diagramy nejsou určeny pro zákazníka, ale pro rychlé zachycení složitých vazeb mezi různými částmi modelu budou neocenitelné.


Monday, April 26, 2004 11:01:00 PM (Central Europe Standard Time, UTC+01:00)       
Comments [0]  UML


 Sunday, April 25, 2004
Výběr ze seznamu Id serverových ovládacích prvků na stránce

V konferenci EMWAC se objevil příspěvek http://konference.vyvojar.cz/post.aspx?id=53046, jehož autor chce do vlastnosti ve svém serverovém ovládacím prvku uložit Id jiného ovládacího prvku na stránce. Vývojář by neměl zapisovat Id přímo, ale vybírat ze seznamu na stránce vlastností. První myšlenkou autora příspěvku bylo nadeklarovat vlastnost jako WebControl - to je samozřejmě nesmysl. Když zkusíme perzistovat vlastnost na stránce (atribut PersistenceMode), tak dosáhneme pouze toho, že validátor ASPX stránky nás bude upozorňovat, že máme na stránce 2 prvky se stejným Id.

To, o co se autor snaží, umí všichni validátoři. Jejich vlastnost ControlToValidate nabídne Id všech prvků na stránce, kteří obsahují vlastnost dekorovanou atributem ValidationProperty. Vlastnost ControlToValidate je samozřejmě typu string. Seznam Id naplní speciální TypeConverter s názvem ValidatedControlConverter.

ValidatedControlConverter nelze použít pro načtení seznamu Id všech prvků na stránce, protože, jak jsem již napsal, ta bere v úvahu jen prvky s vlastností označenou atributem ValidationProperty. Proto jsem napsal ControlConverter, který nalezne Id všech prvků na stránce.

public

class ControlConverter : StringConverter

{

  public ControlConverter() : base ()

  {

  }

  public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)

  {

    

if ((context == null ) || (context.Container == null ))

        return null ;

     object [] foundControls = enumerateControls(context.Container);

     if (foundControls == null )

     return null ;

     return new StandardValuesCollection(foundControls);

  }

  public override bool GetStandardValuesSupported(ITypeDescriptorContext context)

  {

    return true ;

  }

  public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)

  {

    return false ;

  }

  private object [] enumerateControls(IContainer container)

  {

    ArrayList retList = new ArrayList();

    foreach (IComponent component in container.Components)

   {

      Control foundControl = component as Control;

      if (foundControl == null )

       continue ;

     if ((foundControl.ID == null ) ||

        (foundControl.ID == String.Empty))

           continue ;

      retList.Add(foundControl.ID);

  }

   return retList.ToArray();

  }

}

Converter se u vlastnosti použije takto:

[Browsable(

true )]

[TypeConverter(

typeof (ControlConverter))]

public string MyControl

{

  get

  {

    string myControl = ( string ) ViewState["MyControl"];

    return (myControl == null ? String.Empty : myControl);

  }

  set

  {

    ViewState["myControl"] =

value ;

  }

}



Sunday, April 25, 2004 6:44:00 PM (Central Europe Standard Time, UTC+01:00)       
Comments [2]  ASP.NET | .NET Framework


Proč další weblog?

V prvním příspěvku je nedobrým zvykem přivítat odvážného čtenáře a nepřímo mu polichotit, jaký prokázal dobrý vkus, že se stavil, a také jej nenásilně vést k poznání, že by bylo společenským faux pas, kdyby se nezastavil znovu. Nevím, jestli je v tom zákonitost přírodní nebo společenská , ale nejlepší v nesmrtelné disciplíně lichocení bývají rychlokvašení autoři, jejichž duševní invence a chuť psát zmizí po třech dalších upocených a z duševní mizérie vydolovaných příspěvcích. Takže první zásada, drbání za ušima, milý svéprávný čtenáři, na tomto weblogu nikdy nebude.

V nadpise příspěvku je otázka, která vyjadřuje mé vlastní pochybnosti o smyslu psaní weblogu. Je psaní weblogu pouhým projevem grafomanie a snahy autora vykřičet do světa své „originální“ já? Nebo je weblog sbírkou většinou nekomentovaných hypertextových odkazů, veřejně sdílenými záložkami autora, který tím chce světu cosi sdělit? Ale co? Snad, já také umím hledat v Googlu, a protože jsem vždy „in“ v technologiích, tak používám čtečku RSS? :) Takto pojaté weblogy jsou pouhým plevelem, roztříštěným, plochým a všedním svědectvím o aktivitách občas (buďme spravedliví) alespoň marginálně zajímavých dušiček, které nedokáží reflektovat sami sebe s dostatečným nadhledem. Zásada druhá – tento weblog není a nebude sbírkou mých do světa vykřičených komplexů, deprivací, úchylek a ani se nestane chytřejším bratrancem záložek z Internet Exploreru.

 Přes všechny mé výhrady jsem si weblog zřídil. Weblogy jsem kritizoval dlouho, ale nikdy jsem nedokázal říci, že weblogy jsou je pouhá efemérní móda, která nic nepřináší. Našel jsem si „své“ weblogy, které si rád přečtu. Jako pars pro toto bych uvedl weblog Patrika Zandla s názvem Marigold . Patrik Zandl velmi dobře ví, jak vytvořit zajímavý weblog – viz jeho článek. Myslím, že nejdůležitější v článku uváděnou zásadou je ta, která říká, že weblog by měl mít obsah určený nejen k přečtení a zapomenutí, ale také trvalejší obsah, kvůli kterému se budou čtenáří vracet. Zásada třetí – tento weblog se nechce stát další dokonalou ilustrací úsloví „jedním uchem dovnitř a tím druhým ven“. V pláštíku weblogu se budu vyjařovat k tématům, jež mě zajímají a o nichž si myslím, že budou zajímat i ostatní.

V předmluvě každé knihy je většinou informace o autorovi, a proto i v úvodním příspěvku weblogu napíšu alespoň pár základních údajů o sobě, abyste měli lepší představu, kdo to tu káže, a dokázali si alespoň v hrubých konturách personifikovat moji osobnost pro případná proklínání nebo vytvoření schematického portrétu, na nějž se házejí úlevné psychohygienické šipky.:) Je mi 26 let a pracuji jako analytik a vývojář v SW společnosti DIGI TRADE . Ve weblogu se budete setkávat s postřehy k UML, návrhovým vzorům a OO principům obecně. Vyvíjím hlavně na platformě NET Framework, kterou jsem si oblíbil ještě když byla v plenkách, respektive v Beta verzi, a proto se mnoho příspěvků bude týkat jí a také její „odlehčené-compact“ verze určené pro mobilní zařízení. Moje články o analýze a vývoji můžete najít na serveru Interval.cz . Přispívám také do konfererencí EMWAC VS.NET a Builder .Net. Za publikační činnost a příspěvky v konferencích mi byl v lednu 2004 společností Microsoft propůjčen MVP titul. Mobilní zařízení (PDA s Windows Mobile, mobilní telefony) a GSM/UMTS sítě jsou dalším tématem weblogu. Nyní je mým hlavním domácím mazlíčkem (samozřejmě kromě manželky :) ) MDA II , o němž jsem psal na MobilManii.

Ač souhrou okolností, nutností a náhod, které se občas eufemisticky říká život, se nyní zabývám hlavně technickými obory, nebylo tomu tak vždy, a moje studium se zaměřovalo na humanitní vědy. Jak to pregnantně vyjadřuje podtitulek weblogu, humanitní zájmy docelují moje vnímání světa a jsou příjemným korektivem k přetechnizovanému všednímu životu. Proto se na tomto weblogu setkáte i s komentáři k mé oblíbené literatuře (Ludvík Vaculík, Pavel Kohout, Jan Skácel, Oldřich Mikulášek, Dostojevskij...) a filosofii (Martin Heidegger, Jan Patočka, Vídeňský kroužek, strukturalismus, fenomenologie...). Jestliže Vám budou připadat některé mé závěry ve weblogu příliš subjektivní, apodiktické nebo paradoxní, pak vězte, že souhlasím s tezí „paradox je vášeň myšlení“ (Kierkegaard) a že pokud něco říkám, tak tím vyjadřuji „zde stojím, nemohu jinak“. Poslední citát pochází od Luthera a já jsem katolík. A tak je to u mě se vším.:)

Pokud jste dočetli příspěvek až sem, tak Vás vítám. Myslím, že si budeme rozumět.



Sunday, April 25, 2004 3:51:00 PM (Central Europe Standard Time, UTC+01:00)       
Comments [9]  Ostatní