Archive for the ‘ softwarová architektura ’ Category

Interceptor pattern v C#

Na webu eggheadcafe jsem narazil na zajímavý článek, který popisuje analýzu a implementaci Interceptor/Plugin patternu.Ten nepatří mezi Gof design patterns ale to neznamená, že by se nepoužíval a není potřeba ho znát (-: Namátkou mě napadá použití v orm frameworku nHibernate pro logování chyb atd ….

Interceptor pattern

Průběžná databázová integrace (nejen) v .netu – 1 Úvod

Použití nástroje pro správu zdrojových kodů je v současnosti standart a snad nenajdeme větší projekt, který by ho nevyužíval.Udržování databáze v podobném verzovatelném stavu ale už taková samozřejmost není.Snadno se tak můžou vývojáři dostat do situace, kdy k nasazení nového verze softwaru je potřeba sloučit změny na databázi z několika vývojářských stanic, chybí funkční skripty atd,atd …

V mojem článku se pokusím nastínit jak se dá údržba a průbežná integrace databáze řešit, samozřejmě je to jen jedna z možností a každému projektu sedí trošku něco jiného.Podstata ale zůstává stejná a to …

  1. Udržování všech databázových skriptů v systému pro správu zdrojových kodu a to skripty ddl (data definition language, vytváření db,  tabulek) a  dml (data manipulation language, plnění tabulek daty) První verze softwaru s relativně ustáleným databázovým návrhem je brán jako určitý odrazový můstek, vůči této verzi jsou pak spoušteny další přibývajcí změny, jsou přidávány sloupce atd ..
  2. Použití build skriptu, který vytvoří znova databázi, nahraje do ní data (spustí se databázové skripty z cvs), zbuildí projekt, nahraje další potřebné data k chodu aplikace (obrázky atd ..) tento build skript je spouštěn při větších změnách na vývojářském stroji.
  3. Automatizace buidů- na každý komit do správy zdrojových kodu je „pověšen“ build skript z bodu dva, který znova vytvoří db,nahraje data, vytvoří build a v neposlední řadě spustí nad buildem unit testy (případně gui testy atd …) Toto zajištuje Integrační server – nejčastěji Cruise Control

Continuous Database integration

zajímavý článek o continuos database integration

a další článek, který s databázovou integrací souvisí, zabývá se automatizací buildů a nástrojem nAnt

Další odkazy, zejména výborný článek znovu o db integraci

A trošku teoretický náhled na věc

Vlastní primitivní IOC kontejner v C#

IOC kontejner je komponenta, která vychází z principů Inversion of control a Dependency Injection.Slouží k minimalizaci vztahů tříd z různých vrstev programu.

Ve zkratce jde o to , že se objekty nevytváří ve třídách, ale žádámě o ně komponentu, která má instancování na starosti(IOC kontejner).Klient tedy požádá kontejner o třídu implementující požadované rozhraní a od komponenty se mu vrátí třída.jakou třídu vybere je čistě na komponentě, důležité ale je aby implementovala požadované rozhraní.

Já jsem si připravil rozhraní   IObjectFactory, které obsahuje jedinou metodu a to   IBLLBase GetCRUD(Type bll) . Metoda GetCRUD  má jako vstupní proměnnou Typ rozhraní  a vrátí Objekt, který implementuje rozhraní IBLL,  což je rozhraní, které v mém případě implementují všechny servisní třídy.

Způsob, jakým to komponenta udělá je čistě na její implementaci.Já jsem si zvolil uložení dvojic Interface-Třída v konfigurčním souboru.Využiji zde konfiguračních možností prostředí .net a vytvořím si vlastní  konfigurační sekci web.configu, kterou budu mít v externím souboru ObjectBuilder.config.Ukázka  struktury je zde :

<objectBuilder
apiNamespace=“EpimexWebSite.Model.Repository.EntityRepositories.API“
implNamespace=“EpimexWebSite.Model.Repository.EntityRepositories.IMPL“
>
<Items>
<addType interfaceToLoad=“ICompanyRepository“
classToLoad=“CompanyRepository“/>

<addType interfaceToLoad=“IMachineRepository“
classToLoad=“MachineRepository“/>

<addType interfaceToLoad=“IGalleryRepository“
classToLoad=“GalleryRepository“/>

<addType interfaceToLoad=“IImageRepository“
classToLoad=“ImageRepository“/>

</Items>

</objectBuilder>

ukázka návrhu tříd kontejneru zde:


kostra XMLBasedObjectFactory:

a hlavní metoda Registrující objekty z Konfigurace

a nakonec sekvenční diagram znázornující komunikaci mezi aspx bázovou třídou a kontejnerem