Úvod
Před časem mě Radek Červinka požádal, zda bych něco nenapsal o kbmMW (components4developers.com) – vícevrstvém frameworku pro Delphi. Vzhledem k tomu, že kbmMW používáme v našich produktech již od roku 2008, jsem si řekl: „Proč ne?“. Víceméně se pokusím sepsat pár informací o tom, proč jsme si vybrali kbmMW, co nám to přineslo a jaké máme zkušenosti s danou sadou komponent.
Proč kbmMW?
Od začátku jsme používali klasickou architekturu klient / server pro síťovou komunikaci v našem systému. Celá funkcionalita byla na straně klientské aplikace a potřebné informace se tak přenášely po síti až na pracovní stanici. S postupem času přibýval objem přenášených dat společně s tím, jak se zvyšovaly schopnosti vyvíjeného systému.
Protože veškerý vývoj u nás probíhá v edici Delphi Professional, padlo rozhodnutí zakoupit nějaký n-tier framework. Tehdy jsme objevili pouze DataAbstract od RemObjects a bkmMW od Components4Developers. Vzhledem k našim požadavkům jsme se nakonec rozhodli pro kbmMW.
Co jsme od n-tier frameworku očekávali?
Přenesení zátěže na server.
- Vzdálené volání funkcí aplikačního serveru.
- Snadný přenos libovolných dat (nejenom databázových) mezi klientem a serverem.
Systém kompatibilní s našimi stávajícími nástroji
- NexusDB – databázový server
- Report Builder – generování tiskových sestav
Přinesení nových možností pro vyvíjený systém
- Databázová univerzálnost. Možnost napojení na MS SQL, Oracle, apod. bez nutnosti změny v klientské aplikaci.
- Univerzální komunikační protokoly pro výměnu dat s externími systémy. Podpora SOAP apod.
Přechod
Nakonec jsme se tedy rozhodli pro kbmMW a nastalo období přepsání systému tak, abychom využili možností kbmMW. Nakonec byl celý proces relativně snadný a rychlý. Kompletní přechod z klient / server systému na n-tier architekturu nám zabral ani ne týden.
Pravda, před samotným přechodem jsme se nejprve museli naučit s kbmMW pracovat a pochopit způsob, jak kbmMW funguje. Tady jsme ale narazili na pár problémů. Na webu výrobce jsou k dispozici tutoriály. Bohužel některé z nich jsou na starší verzi kbmMW než je ta aktuální, ale současně aktuální verze funguje trochu jinak než ta, na kterou je tutoriál napsán.
Obrovská výhoda kbmMW je zejména ve velice snadném přenosu TDataSetu mezi aplikačním serverem a klientskou aplikací včetně zpětného přenosu změněného TDataSetu zpět na server a uložení provedených změn do databáze. V klientské aplikaci jsme tak pouze zaměnili komponenty TnxQuery a TnxTable (obdoba TQuery a TTable u NexusDB serveru) za TkbmMWXClientQuery (databázově neutrální client query z kbmMW). Velice nám pomohlo to, že v našem systému jsme měli centralizovaný kód pro inicializaci TnxQuery a TnxTable komponent. Postačilo nám tak pouze změnit jednu unitu. Kupodivu vše fungovalo hned od začátku bez nějakých větších problémů.
Dalším krokem je přesun funkcionality ze strany klientské aplikace na server. S tím se potýkáme dodnes. Přechod z klient / server na n-tier architekturu je přece jenom v tomto ohledu mnohem náročnější. Pro nás byl důležitý fakt, že jsme byli schopni vydat aktualizaci aplikace s využitím kbmMW v relativně krátkém čase. Přesun funkcionality na server pak lze realizovat postupně.
Současnost – jak to funguje
S odstupem času musím říct, že změny rozhodně nelitujeme. kbmMW se ukázal jako velice stabilní n tier framework. Navíc jsme začali využívat další funkce, které kbmMW nabízí. Aktuálně opouštíme Intraweb (tvorba www aplikací v Delphi) a přecházíme na implementaci standardního REST serveru ve spojení s www serverem. Obojí funkcionalitu (http server + AJAX transport stream format) již kbmMW bez potíží podporuje. Další velikou výhodou pro nás je nativní implementace JSON parseru + jednoduchý template engine pro generování www stránek.
Jediným problémem tak zůstává o něco méně spolehlivá technická podpora. Během implementace kbmMW jsme narazili na několik problémů. Bohužel odpovědi na naše dotazy jsme někdy dostali až po více než měsíci. Tady bych viděl veliký problém kbmMW. Ostatně stačí se podívat do diskuzních skupin a prohlédnout si historii dotazů.
O nás
Již více než 20 let se zabýváme vývojem SW pro učitele a pedagogy. Aktuálně vyvíjíme v Delphi XE2 a XE3 Professional a využíváme několik různých setů komponent. Mezi aktuálně používané komponenty a nástroje patří ModelMaker Code Explorer, MadExcept, Developer Express VCL, Report Builder, WPTools, SMImport, DW Script, kbmMW, ImageEn, NexusDB, BlockEngine, wPDF, JEDI VCL, Abbrevia a Rubicon. Více informací naleznete na adrese dosli.cz.
Poznámka editora: Impulsem k sepsaní byla poznámka Petra v konferenci
U nás jsme také řešili přechod z Intrawebu někam jinam. Stávající Intraweb
byl pro nás pod zátěží velice nestabilní.
Ukázku www rozhraní, které je postaveno na Intrawebu, je stále dostupná
na http://demo.edubase.cz.
Nakonec jsme skončili na čistém REST serveru vytvořeném pomocí kbmMW
(http://www.components4developers.com), který také slouží jako
plnohodnotný HTTP(S) server. K datům pak přistupujeme pouze pomocí JavaScriptu.
Výsledný převod aplikace do nové podoby nám zabral cca 2 měsíce
a nemohu si kbmMW vynachválit. Sice se nejedná o tvorbu vzhledu stránek
v pascalu, ale výsledná funkcionalita je někde úplně jinde.
Samozřejmě na serveru je veškerý kód čistě v pascalu.
Ukázku naleznete na adrese http://edoc.dosli.cz nebo http://edubazar.dosli.cz.
Navíc jako skriptovací jazyk (včetně podpory šablon) u html stránek je použit
Delphi Web Script (http://code.google.com/p/dwscript/). Funguje to skvěle.
a přiznám se že mne odkazované demo celkem potěšilo. Petr Slípek snad napíše i druhý díl, kde snad naznačí jak dělá web rozhraní za pomocí uvedených věcí.