Front vezérlő tervezési minta
From Wikipedia, the free encyclopedia
Remove ads
A front vezérlő programtervezési minta több minta-katalógusban is szerepel, és a WEB alkalmazások tervezéséhez, felépítéséhez kapcsolódik. A minta „egy központosított belépési pontot biztosít a kérések kezeléséhez“[1]
A front vezérlők gyakran használatosak WEB alkalmazásokban, a működés folyamatainak implementálására. Bár nem feltétlenül szükséges, de sokkal könnyebb kontrollálni a navigációt (az oldalváltások sorát) az egymással összefüggésben lévő oldalak között (például egy online vásárláshoz használt lapok/„lépések“ között) egy front vezérlőből, mint megoldani, hogy az oldalak külön-külön feleljenek a navigációért.
A front vezérlő implementálható egy Java osztályként, vagy egy szkriptben egy szkriptnyelven, mint például a PHP, Python vagy a Ruby, amelyben egy webes munkamenet minden egyes kérésénél meghívnak egy szkriptet. Ez a szkript, például egy index.php, kezeli majd az alkalmazás vagy a keretrendszer minden általános feladatát, mint például a munkamenet (session) kezelés, a gyorsítótárazás (cache) vagy a bejövő adatok szűrése. A konkrét kérés alapján, a front vezérlő további objektumokat hoz létre, és eljárásokat hív meg, hogy a ténylegesen megkívánt feladat/feladatok el legyenek végezve.
A front vezérlő alternatívája egyedi szkriptek sora lenne, mint a bejelentkezes.php, megrendeles.php stb., minden egyes kérés típushoz külön-külön. Ezeknek a szkripteknek duplikált kódrészletei vagy objektumai lennének, a minden kérésnél előforduló rész-feladatok elvégzésére. Mindazonáltal az egyes szkriptek nagyobb rugalmassággal rendelkezhetnének az egyes konkrét feladatok elvégzésére.
Remove ads
Kapcsolat az MNV (MVC) szerkezettel
A front vezérlő szinte minden modell-nézet-vezérlő (MNV, angolul MVC) szerkezeti mintát megvalósító rendszerben implementálva van. A vezérlő az MNV-minta egyik leginkább általánosítható része, mivel a vezérlőkben jellemzőek az olyan tipikus műveletsorok, amelyeket közösek. A vezérlőnek egy „éles“ alkalmazásban elég sok mindent kell csinálnia, mielőtt a rá vonatkozó konkrét művelet végrehajtásába kezd: pl.: a HTTP adatok előfeldolgozása, biztonsági ellenőrzések, alkalmazásszintű beállítások elvégzése, munkamenet indítása, konfigurációs állományok betöltése, és még sorolhatnánk.
Ezek általában mindegyik vezérlőre nézve közös feladatok, így felesleges lenne ezt minden vezérlő „elején“ megismételni. Emiatt, a közös dolgokat általában külön választják, kiemelik, és a konkrét műveletet elvégző vezérlők „elé“ teszik. Az egyes vezérlők előtti közös műveletek elvégzéséért, és a tényleges feladatot ellátó vezérlő ezek után történő meghívásáért felelős részt, front vezérlőként valósítják meg.
A front vezérlő másik előnye egy MNV rendszerben, hogy biztosítja az alkalmazás egyetlen belépési pontját. Nélküle minden vezérlő külön-külön meghívható lenne, ami nagyfokú „kuszaságot“ vonna maga után, és biztonsági aggályokat vetne fel. A front vezérlő segítségével (mivel mindegyik vezérlő csak rajta keresztül hívható), lehetőség van a megfelelő biztonsági ellenőrzéseket és beállításokat elvégezni.
Joggal merül fel a kérdés, hogy ha minden vezérlő a front vezérlőn keresztül érhető el, akkor honnan tudja az alkalmazás, melyik vezérlőt kell meghívnia? A meghívandó vezérlőt tipikusan egy GET paraméterrel (URL-ben megadva) szokás átadni, a belépési pontot reprezentáló szkriptnek (pl. index.php?action=megrendeles). A front vezérlőnek azt a részét, amely a megfelelő „igazi“ vezérlő meghívásáról gondoskodik, ki szokták emelni, és alkalmazásvezérlőnek hívják (Application Controller). Az alkalmazásvezérlő hívása általában a front vezérlő utolsó lépéseként jelenik meg.
Remove ads
Összehasonlítás
Az MVC modellben a lap vezérlő a front vezérlő alternatívája.
Remove ads
Szerkezete
A front vezérlő három komponenst definiál:
- XML leképezés: ezek a fájlok a kérést elküldik annak az osztálynak, ami feldolgozza.
- Kérés processzor: a kérések feldolgozását végzi.
- Folyam intéző: megkapva a bejövő kérést és az eredményt elkészíti a következő lapot.
Példák
Sokféle webes alkalmazás keretrendszer implementálja a front vezérlő mintát, többek között:
- a PHP-ben készült MVC keretrendszerek, például Yii, CakePHP, Laravel, Symfony, CodeIgniter, Zend Framework és a Drupal
- az ASP.NET MVC alkalmazás keretrendszer
- az Adobe Flex-ben készült Cairngorm keretrendszer
- a Haskell-ben készült Yesod web alkalmazás keretrendszer
- a Java EE web alkalmazások fejlesztéséhez az Apache Struts vagy a Spring Framework[2]
Remove ads
Példa kód
A vezérlő példa kódja Javában:[3]
private void doProcess(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
...
try {
getRequestProcessor().processRequest(request);
getScreenFlowManager().forwardToNextScreen(request, response);
} catch (Throwable ex) {
String className = ex.getClass().getName();
nextScreen = getScreenFlowManager().getExceptionScreen(ex);
// put the exception in the request
request.setAttribute("javax.servlet.jsp.jspException", ex);
if (nextScreen == null) {
// send to general error screen
ex.printStackTrace();
throw new ServletException("MainServlet: unknown exception: " +
className);
}
}
Remove ads
Értékelés
A front vezérlőnek három előnye van:[4]
- Központi vezérlés: A front vezérlő kezeli a webalkalmazás összes kérését. Ez előnyös a teljes alkalmazásra kiterjedő házirendek számára.
- Szálbiztosság: Minden új kérés egy új parancs objektum létrejöttét eredményezi. A parancs objektumok tervmintája nem tartalmazza a szálbiztosságot, így a parancs osztálynak kell szálbiztosnak lenni. Ha ilyeneket használ az alkalmazás, akkor szálbiztos lesz.
- Konfigurálhatóság: Mivel a webalkalmazásban egy front vezérlő van, a webalkalmazás konfigurációja egyszerűsödik. Ha új parancsokat és hozzájuk tartozó objektumokat adnak hozzá, akkor az eddigiek közül csak a front vezérlőt kell megváltoztatni.
Ezzel szemben a sebesség lelassulhat, ha a vezérlő mögött XML vagy adatbázis áll. A már létező rendszerek refaktorálása komplett cserét jelent, ami megnehezíti a betanulást.
Remove ads
Kapcsolat a modell-nézet-vezérlő mintával
A rendszer megbízhatóságát és karbantarthatóságát segíti, ha a közös kódrészeket inkább egy helyen tartjuk és egy központi helyre emeljük ki.
Az alkalmazás adatainak kezelésének központosítása miatt nem kell másolgatni az adatbázissal foglalkozó kódokat.
Az MVC minta komponenseit jól el lehet különíteni, ami előnyös a tesztelés szempontjából. Ez igaz a front vezérlőre is.
Lásd még
- Programtervezési minta
- Közvetítő programtervezési minta *Megjegyzés: a front vezérlő mintára, egy specializált közvetítő mintaként is tekinthetünk.
Jegyzetek
Hivatkozások
Külső hivatkozások
Fordítás
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads