Sobes.tech
Middle

Kedy sa vytvára objekt kontroléra a aká je jeho doba života?

sobes.tech AI

Odpoveď od AI

Objekt kontroléra sa vytvára v okamihu prijatia HTTP požiadavky routerom Rails, ktorý určuje, ktorý kontrolér a akcia by mali spracovať požiadavku.

Životnosť objektu kontroléra je obmedzená na jeden HTTP požiadavok. Po spracovaní požiadavky a generovaní odpovede Rails zničí objekt kontroléra.

Toto sa deje v nasledovnom poradí:

  1. Prijatie požiadavky: Web server odovzdá HTTP požiadavku aplikácii Rails.
  2. Routovanie: Rails routér analyzuje požiadavku a nájde zodpovedajúci kontrolér a akciu.
  3. Inicializácia kontroléra: Rails vytvorí nový inštančný objekt triedy kontroléra, definovanej routérom.
  4. Vykonanie akcie: Rails zavolá zodpovedajúcu metódu-akciu v vytvorenom objekte kontroléra.
  5. Spracovanie požiadavky: Metóda-akcia vykonáva logiku, interaguje s modelmi a prípadne s inými službami.
  6. Renderovanie zobrazenia: Kontrolér pripraví údaje na zobrazenie a zavolá jeho renderovanie.
  7. Odoslanie odpovede: Rails vytvorí HTTP-odpoveď, ktorá obsahuje výsledok renderovania zobrazenia (alebo JSON, alebo iný formát), a odošle ju klientovi.
  8. Zničenie kontroléra: Po odoslaní odpovede sa objekt kontroléra a s ním spojené premenné (napríklad @instance_variables) zničia zberačom odpadkov Ruby.
# Približne, ako to vyzerá na úrovni frameworku
# (nie je to skutočný kód frameworku, ale konceptuálny príklad)

class Rails::Application
  def receive_request(request)
    # request - objekt HTTP požiadavky
    route = Rails.application.routes.recognize(request)
    # route obsahuje informácie o kontroléri a akcii

    controller_class = route.controller_class
    action_name = route.action_name

    # Vytvorenie inštancie kontroléra
    controller_instance = controller_class.new
    controller_instance.request = request

    # Vykonanie akcie
    response = controller_instance.process(action_name)

    # Odoslanie odpovede a zničenie objektu
    send_response(response)
    # Objekt controller_instance sa stáva kandidátom na zber odpadu
  end
end

Takže, každý nový HTTP požiadavok vedie k vytvoreniu nového, nezávislého inštancie kontroléra. To zabezpečuje, že stav jedného požiadavku neovplyvňuje stav iných požiadaviek. Premenné inštancie (@) v kontroléri žijú presne toľko, koľko sa spracováva jeden konkrétny požiadavok.