Blog
Nové technologie. Microsoft. C#. Silverlight. ASP.NET MVC
Je libo vlastní MVC web-framework?
Úvod
Jako semestrální práci do předmětu Programování v jazyku C++ na ČVUT jsem dostal za úkol vytvořit http proxy server.
Jeho součástí je také administrační rozhraní přístupné skrze webové rozhraní. Pro tyto účely jsem navrhl aplikaci se (skoro) všemi prvky, které byste hledali u ASP.NET MVC. A sice:
· MVC architektura
· Šablonovací systém – snadné vytváření uživatelského rozhraní pomocí šablon, ve kterých se definují html formátovací značky a kam se vkládají data
· Validace formulářů
· Databázový backend - v tomto případě se jedná o SqLite
· „Hezké“ URL – ve formátu doména/controller/akce
· Libovolné parametry předávané do akcí jednotlivých kontrolerů skrze GET nebo POST
· http autentifikace
· caching
· TDD-friendly architektura – použitá architektura umožňuje snadné zapojení moderních principů Test Driven Development, Inversion of Controll aj.
Jak vidíte, jedná se opravdu o plnohodnotný systém, za pomocí kterého je teoreticky možné vytvářet moderní interaktivní weby. Pro jeho reálné použití by bylo sice potřeba optimalizovat ho po stránce rychlosti, konfigurovatelnosti URL a hlavně ho více přetvořit do podoby frameworku/knihovny, oproti stávající podobě, kdy je integrován do aplikace proxy server. Avšak hlavní důvod, proč tento článek píši a proč tak často zmiňuji ASP.NET MVC je ten, že vývojový čas se pohyboval okolo 60 hodin, plus cca. 15 hodin na návrh architektury (UML), nastavení vývojového prostředí a vyladění kompilačního procesu (nezapomeňte, že se bavíme o C++). Oproti tomu ASP.NET MVC je vyvíjeno již více než rok s několikačlenným týmem. Ačkoliv uznávám, že po stránce funkcionality je ASP.NET MVC mnohem dále, zase je třeba brát v potaz, že ASP.NET MVC využívá spoustu již existující funkcionality z knihoven ASP.NET (http infrastruktura, autentifikace, šablony…).
Já poskytuji vytvořený kód zcela zdarma k volnému použití pod licencí GNU GPL a budu jenom rád, pokud se někomu bude framework hodit, či dokonce se ujme jeho rozšiřování či zdokonalování.
Implementační detaily:
Program jsem navrhl jako 4 vrstvou aplikaci, a sice skládající se z následujících vrstev:
- Infrastructure – podpůrné třídy aplikace, Data Access Objekty pro přístup do databáze aj.
- GUI – podpora vykreslování GUI
- Domain – objekty domény problému (Rule, Setting, User…)
- Application – kontrolery, které obsluhují jednotlivé události aplikace
Vrstvy jsou striktně oddělené a každá vrstva komunikuje pouze s vrstvou pod sebou (kde 1. je vrstva nejnižší). Díky extensivnímu použití rozhraní je velmi snadné případné nahrazení databázové vrstvy například ukládáním do paměti aj.
Uživatelé proxy serveru (je možné jich v admin. rozhraní přidat libovolné množství) se musí nejdříve přihlásit skrze HTML autentifikaci a poté již mohou proxy používat. V aplikaci je také speciální uživatel „admin“, který nelze odstranit a jako jediný má přístup do administračního rozhraní.
Aplikace dále obsahuje komplexní systém pro vytváření filtrů proxy komunikace (zde nazývané Pravidla). Více viz oddíl Popis admin. rozhraní.
Veškerá tato funkcionalita by nebyla možná bez použití knihoven třetích stran a sice:
- Boost – apliace používá v celé své šíři smart pointery, regulérní výrazy, serializaci objektů (cache html odpovědí v db) a formátování řetězců
- SqLite – embedded databáze slouží k ukládání konfigurace aplikace, jako úložiště cachovaných souborů a jako zdroj šablon GUI.
- Arachnida – knihovna slouží k obsluze http požadavků od klientů + podpůrné http struktury
- Libcurl – http klientská část – nahradila patřičnou knihovnu z Arachnida frameworku, která obsahovala programové chyby
- Html_template – šablonový systém upotřebený pro vykreslování GUI
Nepřímo (požadavek knihoven 3. stran) aplikace také vyžaduje dynamické knihovny OpenSSL a Zlib.
Administrační rozhraní
Do admistračního rozhraní se uživatel dostane zadáním localhost adresy a nastaveného portu proxy serveru v prohlížeči. Server musí být spuštěný.
Defaultní port proxy je 8080 a heslo do administrátorského rozhraní je „admin“.
První sekce umožňuje vytvářet uživatele a měnit jim hesla.

Druhá sekce umožňuje vytváření a správu komplexních filtrovacích pravidel.

V další části jsou globální nastavení aplikace.

A nakonec výpis z logů aplikace (jinak také soubory v adresáři aplikace).

Kompilace, distribuce
Aplikace byla vyvinuta pod Windows (XP) ve Visual Studiu 2008, které by mělo být konformní s C++ standardy.
Úspěšná kompilace je podmíněná vlastnictví všech podpůrných knihoven, viz. sekce Implementační detaily výše. Projekt nepoužívá žádnou funkcionalitu specifickou pro konkrétní platformu, mělo by tedy být možné ho celkem bez problémů naportovat na další platformy.
Aplikace je distribuována pod licencí GNU GPL.
Součástí archivu jsou zdrojové kódy, SqLite databáze, Visual Studio Solution a zkompilovaný projekt pro Windows.
Komentáře