Sobes.tech
Middle

Երբ է ստեղծվում վերահսկիչ օբյեկտը և ինչ է նրա կյանքի ժամկետը?

sobes.tech AI

Պատասխան AI-ից

Օբյեկտը վերահսկողը ստեղծվում է այն պահին, երբ ստացվում է HTTP-հարցումը Rails- ի երթուղին, որը որոշում է, թե որ վերահսկողն ու գործողությունը պետք է մշակեն հարցումը:

Օբյեկտի կյանքի տևողությունը սահմանափակ է մեկ HTTP-հարցով:

Հարցման մշակման և պատասխանների ստեղծումից հետո Rails-ը ոչնչացնում է վերահսկողի օբյեկտը:

Սա տեղի է ունենում հետևյալ կարգով:

  1. Հարցման ընդունում: Վեբ սերվերը փոխանցում է HTTP-հարցումը Rails հավելվածին:
  2. Երթուղավորում: Rails երթուղին վերլուծում է հարցումը և գտնում համապատասխան վերահսկող և գործողություն:
  3. Վերահսկողի ինիցիալիզացիա: Rails-ը ստեղծում է նոր օրինակ վերահսկողի դասից, որը սահմանվել է երթուղով:
  4. Գործողության իրականացում: Rails-ը կանչում է համապատասխան մեթոդը՝ գործողությունը, ստեղծված վերահսկողի օբյեկտում:
  5. Հարցման մշակումը: Գործողության մեթոդը իրականացնում է լոգիկան, աշխատում է մոդելների հետ և հնարավոր է՝ այլ ծառայությունների:
  6. Ներկայացման ռենդեր: Վերահսկողը պատրաստում է տվյալները ներկայացման համար և կանչում է նրա ռենդերը:
  7. Պատասխան ուղարկում: Rails-ը ձևավորում է HTTP-պատասխան, որը ներառում է ռենդերի արդյունքը (կամ JSON, կամ այլ ձևաչափ), և ուղարկում է այն հաճախորդին:
  8. Վերահսկողի ոչնչացում: Պատասխանի ուղարկումից հետո վերահսկողի օբյեկտը և նրա հետ կապված փոփոխականները (օրինակ՝ @instance_variables) ոչնչացվում են Ruby-ի կուտակիչով:
# մոտավոր, ինչպես դա է տեսնում ֆրեյմվորկի մակարդակում
# (ոչ իրական ֆրեյմվորկի կոդ, այլ կոնցեպտուալ օրինակ)

class Rails::Application
  def receive_request(request)
    # request - HTTP-հարցման օբյեկտ
    route = Rails.application.routes.recognize(request)
    # route պարունակում է տեղեկություններ վերահսկողի և գործողության մասին

    controller_class = route.controller_class
    action_name = route.action_name

    # Վերահսկողի օրինակ ստեղծում
    controller_instance = controller_class.new
    controller_instance.request = request

    # Գործողության իրականացում
    response = controller_instance.process(action_name)

    # Պատասխան ուղարկում և օբյեկտի ոչնչացում
    send_response(response)
    # Վերահսկողի օրինակ դառնում է կուտակիչի թեկնածու
  end
end

Այսպիսով, յուրաքանչյուր նոր HTTP-հարցում հանգեցնում է նոր, անկախ վերահսկողի օրինակ ստեղծելու:

Սա ապահովում է, որ մեկ հարցման վիճակը չի ազդում մյուսների վրա:

Նախագծային փոփոխականները (@) վերահսկողում ապրում են այնքան ժամանակ, որքան տևում է մեկ կոնկրետ հարցումը։