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

En typisk frontkontrollstruktur.

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:

Genomförande

Främre kontroller kan delas in i tre komponenter:

  1. XML- mappning: filer som mappar förfrågningar till klassen som kommer att hantera begäran.
  2. Begäran processor: används för att bearbeta begäran och modifiera eller hämta lämplig modell.
  3. 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

  1. 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.
  2. Data för applikationen hanteras bäst på en enda plats, vilket eliminerar behovet av duplicerad datahämtning.
  3. 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

Anteckningar

externa länkar