Främre kontroller
Designmönstret för den främre styrenhetens mjukvara är listat i flera mönsterkataloger och är relaterat till design av webbapplikationer. Det är "en kontroller som hanterar alla förfrågningar om en webbplats ", vilket är en användbar struktur för webbapplikationsutvecklare för att uppnå flexibilitet och återanvändning utan kodredundans.
Instruktion
Frontkontroller används ofta i webbapplikationer för att implementera arbetsflöden. Även om det inte är strikt obligatoriskt, är det mycket lättare att styra navigering över en uppsättning relaterade sidor (till exempel flera sidor som används i ett onlineköp) från en främre kontrollenhet än att tilldela individuella sidor ansvar för navigering.
Den främre styrenheten kan implementeras som ett Java- objekt, eller som ett skript i ett skriptspråk som PHP , Raku , Python eller Ruby som anropas för varje begäran av en webbsession . Detta skript skulle hantera alla uppgifter som är gemensamma för applikationen eller ramverket, såsom sessionshantering, cachning och indatafiltrering. Baserat på den specifika begäran skulle den sedan instansiera ytterligare objekt och anropsmetoder för att hantera de nödvändiga uppgifterna.
Alternativet till en frontkontroller är användningen av sidkontroller som är mappade till varje sida eller sökväg på webbplatsen. Även om detta kan göra att varje enskild styrenhet innehåller dubblettkod, ger sidkontrollermetoden en hög grad av specialisering.
Exempel
Flera web-tier applikationsramverk implementerar frontkontrollmönstret:
- Apache Struts
- ASP.NET MVC
- Cairngorm ramverk i Adobe Flex
- Cro eller Bailador ramar i Raku
- Drupal
- MVC- ramverk skrivna i PHP , såsom Yii , CakePHP , Laravel , Symfony , CodeIgniter och Laminas
- Spring Framework
- Yesod , skriven i Haskell
Genomförande
Främre kontroller kan delas in i tre komponenter:
- XML- mappning: filer som mappar förfrågningar till klassen som kommer att hantera begäran.
- Begäran processor: används för att bearbeta begäran och modifiera eller hämta lämplig modell.
- Flödeshanterare: bestämmer vad som ska visas på nästa sida.
Deltagare och ansvar
Kontroller | Avsändare | Hjälpare | Se |
---|---|---|---|
Regulatorn är en ingång för användare att hantera förfrågningar i systemet. Den realiserar autentisering genom att spela rollen som delegerande hjälpare eller initiera kontakthämtning. | Dispatchers kan användas för navigering och hantering av vyutdata. Användare kommer att få nästa vy som bestäms av avsändaren. Dispatchers är också flexibla; de kan kapslas in i styrenheten direkt eller separeras i en annan komponent. Avsändaren ger en statisk vy tillsammans med den dynamiska mekanismen. | Medhjälpare hjälper till vid bearbetning av synpunkter eller kontrollanter. På vysidan samlar hjälparen in data och lagrar ibland data som en mellanstation. Hjälpare gör vissa förprocesser som att formatera data till webbinnehåll eller ge direkt åtkomst till rådata. Flera hjälpare kan samarbeta med en vy för de flesta förhållanden. Dessutom fungerar en hjälpare som en transformator som anpassar och omvandlar modellen till ett lämpligt format. |
Med hjälp av medhjälpare visar vyer information för klienten genom att bearbeta data från en modell. Vyn visas om bearbetningen lyckas och vice versa. |
Exempel på Java-implementering
Den främre kontrollern implementerad i Java-kod:
privat void doProcess ( HttpServletRequest request , HttpServletResponse response ) kastar IOException , ServletException { ... try { getRequestProcessor (). processRequest ( förfrågan ); getScreenFlowManager (). forwardToNextScreen ( förfrågan , svar) ; } catch ( Kastbart ex ) { String className = ex . getClass (). getName (); nextScreen = getScreenFlowManager (). getExceptionScreen ( ex ); // Sätt undantaget i begäran . setAttribute ( "javax.servlet.jsp.jspException" , ex ); if ( nextScreen == null ) { // Skicka till allmän felskärm ex . printStackTrace (); throw new ServletException ( "MainServlet: okänt undantag: " + className ); } }
Förmåner och skulder
Det finns tre primära fördelar förknippade med det främre kontrollmönstret.
- Centraliserad kontroll . Den främre styrenheten hanterar alla förfrågningar till webbapplikationen . Denna implementering av centraliserad kontroll som undviker att använda flera kontroller är önskvärd för att upprätthålla applikationsomfattande policyer som användarspårning och säkerhet.
- Trådsäkerhet . Ett nytt kommandoobjekt uppstår när en ny begäran tas emot, och kommandoobjekten är inte avsedda att vara trådsäkra. Således kommer det att vara säkert i kommandoklasserna. Även om säkerheten inte garanteras när trådningsproblem samlas in, är kod som interagerar med kommandon fortfarande trådsäker.
- Konfigurerbarhet . Eftersom endast en främre styrenhet används i en webbapplikation kan applikationskonfigurationen förenklas avsevärt. Eftersom hanteraren delar ansvaret för sändningen, kan nya kommandon läggas till utan att ändringar behövs i koden.
Mönstret för den främre styrenheten kan medföra prestandaproblem eftersom den enskilda styrenheten utför en hel del arbete, och hanterare kan införa flaskhalsar om de involverar databas- eller dokumentfrågor. Frontcontrollermetoden är också mer komplex än sidkontrollerns.
Relation med MVC
- För att förbättra systemets tillförlitlighet och underhållsbarhet bör duplikatkod undvikas och centraliseras när den involverar gemensam logik som används i hela systemet.
- Data för applikationen hanteras bäst på en enda plats, vilket eliminerar behovet av duplicerad datahämtning.
- Olika roller i model-view-controller (MVC)-mönstret bör separeras för att öka testbarheten, vilket också gäller för kontrollerdelen i MVC-mönstret.
Jämförelse
Sidkontrollermönstret är ett alternativ till frontkontrollmetoden i MVC-modellen.
Sidkontroller | Främre kontroll | |
---|---|---|
Basklass | En basklass behövs och kommer att växa samtidigt med utvecklingen av applikationen. | Centraliseringen av förfrågningar är lättare att modifiera än en basklass. |
säkerhet | Låg säkerhet eftersom olika objekt reagerar olika utan konsekvens. | Hög, eftersom styrenheten är implementerad på ett koordinerat sätt. |
Logisk sida | Ett objekt på varje logisk sida. | Endast en kontrollant hanterar alla förfrågningar. |
Komplexitet | Låg | Hög |
Se även
- Designmönster (datavetenskap) .
- Förmedlarmönster (observera: det främre kontrollmönstret är en specialiserad typ av förmedlarmönster)
Anteckningar
- Alur, Deepak; John Crup; Dan Malks (2003). Core J2EE Patterns, Best Practices and Design Strategies, 2nd Ed . Sun Microsystems Press. s. 650 s. ISBN 0-13-142246-4 .
- Fowler, Martin (2003). Mönster för Enterprise Application Architecture . s. 560 s. ISBN 978-0-321-12742-6 .
externa länkar
- Bear Bibeault's Front Man™ , en lätt Java-implementering.