Middle
Երբ է ստեղծվում վերահսկիչ օբյեկտը և ինչ է նրա կյանքի ժամկետը?
sobes.tech AI
Պատասխան AI-ից
Օբյեկտը վերահսկողը ստեղծվում է այն պահին, երբ ստացվում է HTTP-հարցումը Rails- ի երթուղին, որը որոշում է, թե որ վերահսկողն ու գործողությունը պետք է մշակեն հարցումը:
Օբյեկտի կյանքի տևողությունը սահմանափակ է մեկ HTTP-հարցով:
Հարցման մշակման և պատասխանների ստեղծումից հետո Rails-ը ոչնչացնում է վերահսկողի օբյեկտը:
Սա տեղի է ունենում հետևյալ կարգով:
- Հարցման ընդունում: Վեբ սերվերը փոխանցում է HTTP-հարցումը Rails հավելվածին:
- Երթուղավորում: Rails երթուղին վերլուծում է հարցումը և գտնում համապատասխան վերահսկող և գործողություն:
- Վերահսկողի ինիցիալիզացիա: Rails-ը ստեղծում է նոր օրինակ վերահսկողի դասից, որը սահմանվել է երթուղով:
- Գործողության իրականացում: Rails-ը կանչում է համապատասխան մեթոդը՝ գործողությունը, ստեղծված վերահսկողի օբյեկտում:
- Հարցման մշակումը: Գործողության մեթոդը իրականացնում է լոգիկան, աշխատում է մոդելների հետ և հնարավոր է՝ այլ ծառայությունների:
- Ներկայացման ռենդեր: Վերահսկողը պատրաստում է տվյալները ներկայացման համար և կանչում է նրա ռենդերը:
- Պատասխան ուղարկում: Rails-ը ձևավորում է HTTP-պատասխան, որը ներառում է ռենդերի արդյունքը (կամ JSON, կամ այլ ձևաչափ), և ուղարկում է այն հաճախորդին:
- Վերահսկողի ոչնչացում: Պատասխանի ուղարկումից հետո վերահսկողի օբյեկտը և նրա հետ կապված փոփոխականները (օրինակ՝
@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-հարցում հանգեցնում է նոր, անկախ վերահսկողի օրինակ ստեղծելու:
Սա ապահովում է, որ մեկ հարցման վիճակը չի ազդում մյուսների վրա:
Նախագծային փոփոխականները (@) վերահսկողում ապրում են այնքան ժամանակ, որքան տևում է մեկ կոնկրետ հարցումը։