Az observer minta 3. rész

Bejegyzés dátuma:
2010-12-16

Az előző részben meghatározott feladathoz a következő osztályokat hoztam létre:

Password Class: A jelszó kezelést végzi. Előállítja a jelszót. A beadott szöveget kódolja generált salt alapján. A visszadaott érték a jelszó és a salt érték lesz.
 
UserLogin Class: A beléptetést felügyelő osztály, a tényleges subject, akinek az állapotát más osztályok figyelik. Ellenőrzi, hogy az illető jogosult-e a belépésre és ennek megfelelően veszi fel az állapotát. Az ellenőrzés során a jelszóházirendnek való megfelelőséget vizsgálja. Az állapotok a következőek lehetnek: sikeres belépés, rossz jelszó miatti sikertelen belépés, rossz felhasználói név miatti belépés, a jogosultság lejárt, a felhasználó ki lett tiltva, túl sok sikertlen próbálkozás.
 
User Class: Entity osztály és a felhasználók adatait tartalmazza. Az adatbázisban a User tábla megfelelője. Bejelentkezési név, jelszó, email, salt, utolsó bejelentkezés dátuma, sikertelen belépések száma, utolsó jelszó módosítás dátuma. A DooPHP által a tábla szerkezetéből generált automatikus model osztály, az MVC mintának megfelelően.
 
Mail Class: Alapfeladata, hogy bizonyos állapotok estén, előre meghatározott üzenetet küldjön a számára paraméterként megadott user számára. Az observer interfészt megvalósító osztály és jelen példában a beléptetést felügyelő osztályt figyeli. Az update metódusában a keretrendszerben lévő levélküldési funkciót használja.
 
Log Class: Feladata, hogy bizonyos állapotok esetén egy megadott fájlba bejegyzéseket tegyen. A beléptetés során keletkező üzenetkor fontos információk: IP cím, Username, Dátum, Esemény. Az observer interfészt megvalósító osztály és a jelen példában a beléptetést felügyelő osztályt figyeli. Jelenleg a keretrendszer loggolási funkcióját használja fel.
 
MainController Class: Az webalkalmazást vezérlő osztály, amely a keretrendszer DooController osztályából öröklődik. A routing beállításon keresztül kapja meg a vezérlést a böngészőben kiadott kérésnek megfelelően az osztály adott metódusa, amely végrehajtódik a hívás során. Ez a keretrendszer részeként az MVC mintának a Controller megvalósítása.
 
View Class: A megjelenítést végző osztály, a DooPHP keretrendszer része. Számára a szükséges HTML-t kell összeállítani. Jelen példában egy beléptető form, hibaüzenet és a sikeres belépést jelentő oldalból áll. Összetettebb esetekben ez  kiegészülhet javascript kódokkal és sablon rendszerrel.
Az osztályok közötti együttműködési UML diagram:

Observer Pelda

Az időben lezajló folyamatok és az osztályok kapcsolata vagyis az UML szekvencia diagram:

Observer Sequence

Implementálás: Mivel a tényelges kód a keretrendszerrel együtt több fájlt érint, ezért az egészet inkább letölthetővé tettem (a teljes protected könyvtár) és a kódot nem jelenítem itt meg. A letöltés után a kipróbáláshoz a következő teendőkre van szükség:
  • A DooPHP keretrendszer letöltése és a letöltött fájlok bemásolása
  • Az sql fájl futtatása, a proba user email címének beállítása.
  • A szükséges környezeti változók beállítása: Az adatbázis kapcsolat (config/db.conf.php) és a Logfile helyének és a Host nevének beállítása (config/common.conf.php)
A logfile megtekintéséhez a keretrendszer által használt nézegetőt lehet felhasználni. A logfile xml formátumban készül. A nézegető elérhetősége: hostnév/tools/logviewer.html
 
Az itt közreadott kód hibát is tartalmaz, szándékosan. A következő ide kapcsolódó cikkemben a Unit tesztelésről lesz szó, ahol az elkészült kód tesztelését fogom leírni és felderíteni a hibát, mivel véleményem szerint az adott osztály csak ezekkel együtt teljes értékű.