рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рддрддреНрд╡рдореАрдорд╛рдВрд╕рд╛

рдЫрд╡рд┐


рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рди рдШрдЯрдХ рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рддрдХрдиреАрдХ рд╣реИред рдЬрдм рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рд▓рдХреНрд╖реНрдп рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЖрдкрдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд╛рджреБрдИ рдЧреБрдг рд▓рд╛ рд╕рдХрддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рдЬрд╛рджреВ рдХреА рддрд░рд╣, рдЗрд╕ рддрдХрдиреАрдХ рдХреЛ рдордВрддреНрд░реЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ рдПрдХ рдХрдареЛрд░ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдЧреНрд░рдВрдеред рдЗрд╕рд╕реЗ рдШрдЯрдирд╛рдУрдВ рдХреА рдЧрд▓рдд рд╡реНрдпрд╛рдЦреНрдпрд╛ рд╣реЛрддреА рд╣реИ рдФрд░, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИред рдореЗрд░реА рд╕рдВрдкрд╛рджрдХреАрдп рд╕рд╛рдордЧреНрд░реА рдореЗрдВ, рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдкрд╛рдардХ рдХрджрдо рд╕реЗ, рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдФрд░ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЙрдкрдпреБрдХреНрдд рдиреАрдВрд╡ рд╕реЗ рддрд╛рд░реНрдХрд┐рдХ рдкрде рдкрд░ рдЬрд╛рдПрдВ, рдЬреЛ рдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рдмрд╣реБрдд рд╣реА рдЬрд╛рджреВ рд╣реИред

рд╕рд╛рдордЧреНрд░реА рд╣рд╛рдЗрдкреЛ рдЖрдИрдУрд╕реА рдХрдВрдЯреЗрдирд░ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдерд╛ред рд▓рдШреБ рдХреЛрдб рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдореИрдВ рдЫреЛрдЯреЗ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд░реВрдмреА рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдмрд╕реЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд╕реНрддреБ-рдЙрдиреНрдореБрдЦ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░реВрдБрдЧрд╛ред рдЗрд╕рд╕реЗ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рд╕реНрддрд░ 1: рдирд┐рд░реНрднрд░рддрд╛ рдЙрд▓рдЯрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд


рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░рддрд┐рдорд╛рди рдореЗрдВ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╣рд░ рджрд┐рди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ, рдЕрдиреНрдп рд╡рд╕реНрддреБрдУрдВ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдЧреНрд░рд╛рдл рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо рдлрд╝реЙрд░реНрдо рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ:
рдЫрд╡рд┐

- рдХреБрдЫ рдмрд┐рд▓рд┐рдВрдЧ рд╕реЗрд╡рд╛ (рдЗрдирд╡реЙрдпрд╕рдкреНрд░реЛрд╕реЗрд╕рд░) рдФрд░ рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рд╕реЗрд╡рд╛ (рдЕрдзрд┐рд╕реВрдЪрдирд╛ рд╕реЗрд╡рд╛)ред рдЗрдирд╡реЙрдЗрд╕ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╕реЗрд╡рд╛ рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рд╕реВрдЪрдирд╛рдПрдВ рднреЗрдЬрддреА рд╣реИ, рд╣рдо рдЗрд╕ рддрд░реНрдХ рдХреЛ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░реЗрдВрдЧреЗред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рдореЙрдбрд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдШрдЯрдХ рд╡рд┐рднрд┐рдиреНрди рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЗрди рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЧрд▓рддреА рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЗрд╕ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

class InvoiceProcessor def process(invoice) #      notificationService = NotificationService.new notificationService.notify(invoice.owner) end end 

рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдорджреНрджреЗрдирдЬрд░ рдПрдХ рдЧрд▓рддреА рд╣реИ рдХрд┐ рд╣рдореЗрдВ рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╡рд╕реНрддреБрдУрдВ (рд╣рд╛рдИ рдХрдкрд▓рд┐рдВрдЧ) рдХреА рдЙрдЪреНрдЪ рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА рдорд┐рд▓рддреА рд╣реИред рдпрд╣ рдПрдХрд▓ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рд╣реЛрддрд╛ рд╣реИ - рдПрдХ рдЖрд╢реНрд░рд┐рдд рд╡рд╕реНрддреБ, рдЕрдкрдиреА рддрддреНрдХрд╛рд▓ рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдкрдиреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП; рдФрд░ рдпрд╣ рднреА "рдкрддрд╛" рдирд┐рд░реНрднрд░рддрд╛ рдирд┐рд░реНрдорд╛рддрд╛ рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рдЬреЛ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░рдг рд╣реЛрдЧрд╛ ( "рдмрджрд▓рдиреЗ рдХрд╛ рдХрд╛рд░рдг", рдЖрд░ред рдорд╛рд░реНрдЯрд┐рди )ред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реИ, рдпрд╣ рдирд┐рд░реНрднрд░ рд╡рд╕реНрддреБ рдХреЗ рдмрд╛рд╣рд░ рдЖрд░рдореНрднрд┐рдХ рд╣реИ:

 class InvoiceProcessor def initialize(notificationService) @notificationService = notificationService end def process(invoice) @notificationService.notify(invoice.owner) end end notificationService = NotificationService.new invoiceProcessor = InvoiceProcessor.new(notificationService) 

рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдирд┐рд░реНрднрд░рддрд╛ рдЙрд▓рдЯрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИред рдЕрдм рд╣рдо рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рд╡рд╛рд▓реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ - рдЕрдзрд┐рд╕реВрдЪрдирд╛ рд╕реЗрд╡рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓рд┐рдВрдЧ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП "рдкрддрд╛" рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЪрд╛рд▓рд╛рди рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрддреЗ рд╕рдордп, рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдкрд╛рд╕ рдЗрд╕ рдмрд╛рдд рдХреА рдкрд╣реЗрд▓реА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдХрд┐ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рд╕реЗрд╡рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕реНрдЯрдм рд╕реЗ рдХреИрд╕реЗ рдмрджрд▓рд╛ рдЬрд╛рдПред рдЧрддрд┐рд╢реАрд▓ рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╡рд╛рд▓реА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ, рдЬреИрд╕реЗ рдХрд┐ рд░реВрдмреА, рдЖрдк рдХрд┐рд╕реА рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЕрдзрд┐рд╕реВрдЪрд┐рдд рд╡рд┐рдзрд┐ рд╕реЗ рдкреВрд░рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ; рд╕реНрдерд┐рд░ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде, рдЬреИрд╕реЗ рдХрд┐ C # / Java, рдЖрдк INotificationService рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП Mock рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЦреБрд▓рд╛рд╕рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ Byndyu рдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЕрдкрдиреА 10 рд╡реАрдВ рд╡рд░реНрд╖рдЧрд╛рдВрда рдордирд╛рдИ рдПрдХ рд▓реЗрдЦ рдореЗрдВ !

рд╕реНрддрд░ 2: рд╕рдВрдмрдВрдзрд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХреА рд░рдЬрд┐рд╕реНрдЯреНрд░реА


рдирд┐рд░реНрднрд░рддрд╛ рдЙрд▓рдЯрд╛ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрдЯрд┐рд▓ рдЕрднреНрдпрд╛рд╕ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕рдордп рдХреЗ рд╕рд╛рде, рд╡рд╕реНрддреБрдУрдВ рдФрд░ рд░рд┐рд╢реНрддреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЗ рдХрд╛рд░рдг, рдирдИ рдЪреБрдиреМрддрд┐рдпрд╛рдВ рд╕рд╛рдордиреЗ рдЖрддреА рд╣реИрдВред NotificationService рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдирд╡реЙрдпрд╕рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рд╕реЗрд╡рд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд╣ рдЦреБрдж рдЕрдиреНрдп рд╕реЗрд╡рд╛рдУрдВ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ, рддреАрд╕рд░реЗ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ, рдЖрджрд┐ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреБрдЫ рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдореЗрд╢рд╛ рдПрдХ рдкреНрд░рддрд┐ рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рдвреВрдВрдврдирд╛ рд╣реИ - "рдЬрдм рдирд┐рд░реНрднрд░рддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП?"ред
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рд╣рдЪрд░реНрдп рд╕рд░рдгреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╕рдорд╛рдзрд╛рди рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдирдХреЗ рдХрд╛рдо рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

 registry.add(InvoiceProcessor) .depends_on(NotificationService) registry.add(NotificationService) .depends_on(ServiceX) invoiceProcessor = registry.resolve(InvoiceProcessor) invoiceProcessor.process(invoice) 

рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ:

рдЫрд╡рд┐

рд╣рд░ рдмрд╛рд░ рдЬрдм рдХрдВрдЯреЗрдирд░.рдЖрд░реНрд╕реЛрд▓реНрд╡ () рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдХрд╛рд░рдЦрд╛рдиреЗ рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдВрдЧреЗ, рдЬреЛ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкреИрджрд╛ рдХрд░реЗрдЧрд╛, рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдирд┐рд░реНрднрд░рддрд╛ рдЧреНрд░рд╛рдл рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рддреЗ рд╣реБрдПред `рдХрдВрдЯреЗрдирд░.рдЯреНрд░реЗрд╕ (рдЗрдирд╡реЙрдпрд╕рдкреНрд░реЛрд╕реЗрд╕рд░)` рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

  1. factory.resolve (рдЗрдирд╡реЙрдпрд╕рдкреНрд░реЛрд╕реЗрд╕рд░) - рдХрд╛рд░рдЦрд╛рдирд╛ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдЗрдирд╡реЙрдпрд╕рдкреНрд░реЛрд╕реЗрд╕рд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд▓рд┐рдП рдкреВрдЫрддрд╛ рд╣реИ, рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рд╕реЗрд╡рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рднреА рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
  2. factory.resolve (NotificationService) - рдХрд╛рд░рдЦрд╛рдирд╛ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ NotificationService рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ, ServiceX рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рднреА рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
  3. factory.resolve (ServiceX) - рдХреЛрдИ рдирд┐рд░реНрднрд░рддрд╛ рдирд╣реАрдВ рд╣реИ, рдмрдирд╛рдПрдВ, рдЪрд░рдг 1 рдкрд░ рдХреЙрд▓ рд╕реНрдЯреИрдХ рдкрд░ рд▓реМрдЯреЗрдВ, рдЗрдирд╡реЙрдЗрд╕рдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рдПрдХ рдЗрдХрдЯреНрдареЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред

рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХрдИ рдЕрдиреНрдп рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдкреНрд░рд╢реНрди "рдкрд░рд┐рдгрд╛рдореА рдирд┐рд░реНрднрд░рддрд╛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдбрд┐рдЬрд╛рдЗрдирд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдорд┐рд▓рд╛рди рдХреИрд╕реЗ рдХрд░реЗрдВ"ред рдПрдХ рдЙрджрд╛рд╣рд░рдг:

 class InvoiceProcessor def initialize(notificationService, paymentService) # ... end end 

рд╕реНрдерд┐рд░ рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╡рд╛рд▓реА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ, рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХрд╛рд░ рдПрдХ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

 class InvoiceProcessor { constructor(notificationService: NotificationService, paymentService: PaymentService) { // ... } } 

рд░реВрдмреА рдХреЗ рднреАрддрд░, рдЖрдк рдХрдиреНрд╡реЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдмрд╕ рд╕реНрдиреЗрдХ_рдХреЗрд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЯрд╛рдЗрдк рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдпрд╣ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдирд╛рдо рд╣реЛрдЧрд╛ред

рд╕реНрддрд░ 3: рдирд┐рд░реНрднрд░рддрд╛ рдЬреАрд╡рдирдХрд╛рд▓ рдкреНрд░рдмрдВрдзрди


рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЕрдЪреНрдЫреА рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрди рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ рд╣реИред рдЗрд╕рдХреА рдПрдХрдорд╛рддреНрд░ рд╕реАрдорд╛ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдПрдХ рдШрдЯрдХ рдХреЗ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдПрдХ рдкреВрд▓ред рдЧрд╣рд░рд╛ рдЦреЛрджреЛ, рдФрд░ рдЕрдЧрд░ рд╣рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдПрдХ рдирд┐рдпрдВрддреНрд░рд┐рдд рдЬреАрд╡рдирдХрд╛рд▓ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, HTTP рдЕрдиреБрд░реЛрдз рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдХрд░реЗрдВред
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдореВрд▓ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд▓рд┐рдП рдЙрдореНрдореАрджрд╡рд╛рд░ InstanceFactory рд╣реИред рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЪрд╛рд░реНрдЯ:

рдЫрд╡рд┐

рдФрд░ рддрд╛рд░реНрдХрд┐рдХ рд╕рдорд╛рдзрд╛рди рдШрдЯрдХреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рдгрдиреАрддрд┐рдпреЛрдВ ( рд░рдгрдиреАрддрд┐, GoF ) рдХреЗ рдПрдХ рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдХрдВрдЯреЗрдирд░ :: рд░реЗрдЬреЛрд▓реНрдпреВрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдЕрдм тАЛтАЛрд╣рдо рд╣рдореЗрд╢рд╛ рдирдП рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдлреИрдХреНрдЯреНрд░реА рдХреЛ рд░рд┐рдЬрд╝реЙрд▓реНрд╡рд░ рдХрд╛ рдирд╛рдо рджреЗрдирд╛ рдЙрдЪрд┐рдд рд╣реИред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХрдВрдЯреЗрдирд░ :: рд░рдЬрд┐рд╕реНрдЯрд░ рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдирдпрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ - life_time (рдЬреАрд╡рдирдХрд╛рд▓)ред рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рдореВрд▓реНрдп "рдХреНрд╖рдгрд┐рдХ" (рдХреНрд╖рдгрд┐рдХ) рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд▓рд╛рдЧреВ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рд╕рд┐рдВрдЧрд▓рдЯрди рд░рдгрдиреАрддрд┐ рднреА рд╕реНрдкрд╖реНрдЯ рд╣реИ - рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рдШрдЯрдХ рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╣рд░ рдмрд╛рд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред
рд╕реНрдХреЛрдк рдереЛрдбрд╝реА рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд░рдгрдиреАрддрд┐ рд╣реИред "рдХреНрд╖рдгрд┐рдХ рд░рд╛рд╕реНрддреЛрдВ" рдФрд░ "рдХреБрдВрд╡рд╛рд░реЗ" рдХреЗ рдмрдЬрд╛рдп, рдЕрдХреНрд╕рд░ рдмреАрдЪ рдореЗрдВ рдХреБрдЫ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ - рдПрдХ рдШрдЯрдХ рдЬреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдШрдЯрдХ рдХреЗ рдЬреАрд╡рди рднрд░ рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрддрд╛ рд╣реИред рдПрдХ рд╕рдорд╛рди рдЙрджрд╛рд╣рд░рдг рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдиреБрд░реЛрдз рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдРрд╕реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХрд╛ рд╕рдВрджрд░реНрдн рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, HTTP рдкреИрд░рд╛рдореАрдЯрд░, рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди, рдореЙрдбрд▓ рд╕рдореБрдЪреНрдЪрдпред рдЕрдиреБрд░реЛрдз рдХреЗ рдЬреАрд╡рди рднрд░, рд╣рдо рдЗрди рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдирд╛рд╢ рдХреЗ рдмрд╛рдж, рд╣рдо рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рд╕рднреА рднреА рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред рдЗрд╕ рддрд░рд╣ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдХрд╛рдлреА рдЬрдЯрд┐рд▓, рдмрдВрдж рд╡рд╕реНрддреБ рд╕рдВрд░рдЪрдирд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛:

рдЫрд╡рд┐

рдЖрд░реЗрдЦ рд╕реНрдХреЛрдкреЗрдб рдЖрдЬреАрд╡рди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдШрдЯрдХ рдФрд░ рд▓рд╛рдЗрдлрдЯрд╛рдЗрдорд╕реНрдЯреНрд░реЗрд░реА рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реБрдЖ рдПрдХ рдЦрдВрдб рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо рдПрдХ рддрд░рд╣ рдХрд╛ "рдбрдмрд▓ рдмреНрд░рд┐рдЬ" ( рдмреНрд░рд┐рдЬ, рдЧреЛрдл рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рдорд╛рди) рдерд╛ред рд╡рд┐рд░рд╛рд╕рдд рдФрд░ рдПрдХрддреНрд░реАрдХрд░рдг рддрдХрдиреАрдХреЛрдВ рдХреА рдкреЗрдЪреАрджрдЧрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдШрдЯрдХ рдХрдВрдЯреЗрдирд░ рдХрд╛ рдореВрд▓ рдмрди рдЬрд╛рддрд╛ рд╣реИред рд╡реИрд╕реЗ, рдЖрд░реЗрдЦ рдореЗрдВ рдХрдИ рд╡рд┐рд░рд╛рд╕рдд рд╣реИрдВред рдЬрд╣рд╛рдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдФрд░ рд╡рд┐рд╡реЗрдХ рдЗрд╕реЗ рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд░реВрдмреА рдореЗрдВ рдореИрдВ рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЖрдк рд╡рд┐рд░рд╛рд╕рдд рдХреЛ рджреВрд╕рд░реЗ рдкреБрд▓ рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ:
рдЫрд╡рд┐

рдЕрдиреБрдХреНрд░рдо рдЖрд░реЗрдЦ рд╕рддреНрд░ рдШрдЯрдХ рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ, рдЬреЛ рдЕрдиреБрд░реЛрдз рдШрдЯрдХ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЗ рд▓рд┐рдП рдмрдВрдзрд╛ рд╣реБрдЖ рд╣реИ:

рдЫрд╡рд┐

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЖрд░реЗрдЦ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдкрд░, рдЬрдм рдЕрдиреБрд░реЛрдз рдШрдЯрдХ рдЕрдкрдиреЗ рдорд┐рд╢рди рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд░рд┐рд▓реАрдЬ рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЧреБрдВрдЬрд╛рдЗрд╢ рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред

рд╕реНрддрд░ 4: рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди


рдЕрдм рддрдХ, рдореИрдВрдиреЗ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереА, рдФрд░ рдлрд┐рд░ рдХреИрд╕реЗ рдмрдиреЗ рд╕рдВрдмрдВрдзреЛрдВ рдХреЗ рдЧреНрд░рд╛рдл рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдШрдЯрдХреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣реИ? рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд░реВрдмреА рдСрди рд░реЗрд▓реНрд╕ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ:

 class InvoiceController < ApplicationController def pay(params) invoice_repository = registry.resolve(InvoiceRepository) invoice_processor = registry.resolve(InvoiceProcessor) invoice = invoice_repository.find(params[:id]) invoice_processor.pay(invoice) end end 

рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рдЕрдзрд┐рдХ рдкрдардиреАрдп, рдкрд░реАрдХреНрд╖рдг рдпреЛрдЧреНрдп рдпрд╛ рд▓рдЪреАрд▓рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд╣рдо рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдпрдВрддреНрд░рдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдмрд▓" рд░реЗрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдпрд╣ рдлреНрд░реЗрдорд╡рд░реНрдХ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ASP.NET MVC рдореЗрдВ рдпрд╣ рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рд╕реНрддрд░ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдирд┐рд░реНрднрд░рддрд╛ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рдЙрд▓рдЯрд╛ (IoC, рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд╡реНрдпреБрддреНрдХреНрд░рдо) рддрдХрдиреАрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдЖрд╡реЗрджрди рдХреЛрдб рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рдЬрд╛рддреА рд╣реИ рдФрд░ рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рд╕рд╛рде рдЯрд┐рдХреА рд╣реБрдИ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рд╣рдо рдЦрд░реЛрдВрдЪ рд╕реЗ рд░реЗрд▓ рдЬреИрд╕рд╛ рдХреБрдЫ рдбрд┐рдЬрд╛рдЗрди рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдпреЛрдЬрдирд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:

рдЫрд╡рд┐

рдЖрд╡реЗрджрди рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рд░рд╛рдЙрдЯрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдирд┐рд░реНрджреЗрд╢ рджреЗрддрд╛ рд╣реИред рдРрд╕реА рдпреЛрдЬрдирд╛ рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдЫреЛрдЯреЗ рдЕрдВрддрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдареЗрда рд╡реЗрдм рдврд╛рдВрдЪреЗ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддреА рд╣реИ - рдЖрдИрдУрд╕реА рдХрдВрдЯреЗрдирд░ рдирд┐рд░реНрднрд░рддрд╛ рдмрдирд╛рдиреЗ рдФрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдпрд╣ рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ рдХрд┐ рдХрдВрдЯреЗрдирд░ рдЦреБрдж рдХрд╣рд╛рдВ рдмрдирд╛ рд╣реИ? рд╕рдВрднрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдХреЗ рдЖрд╡реЗрджрди рдХреА рдХрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдврд╛рдВрдЪреЗ рдХреЛ рдЕрдкрдиреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдмрд╣реБрдд рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдг рдореЗрдВ рдПрдХ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдРрдк рдмрд┐рд▓реНрдбрд░ рдРрдк рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рдЬрдЧрд╣ рдирд╣реАрдВ рд╣реИред рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╕реНрдерд╛рди рд╣реИ:

 class App #   - ,      . def initialize @container = Container.new @container .register(Controller) .using_lifetime(:transient) # ,     @container .register(InvoiceService) .using_lifetime(:singleton) # ,     @container .register(Router) .using_lifetime(:singleton) #  end #     -     , #      . def call(env) router = @container.resolve(Router) router.handle(env.path, env.method, env.params) end end 

рдХрд┐рд╕реА рднреА рдЖрд╡реЗрджрди рдореЗрдВ рдПрдХ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рд╣реЛрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореБрдЦреНрдп рд╡рд┐рдзрд┐ред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрд┐рдВрджреБ рдХреЙрд▓ рд╡рд┐рдзрд┐ рд╣реИред рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЖрд╡рдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╛рдЙрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИред рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдХреЛ рд╕реАрдзреЗ рдХрдВрдЯреЗрдирд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХрдорд╛рддреНрд░ рд╕реНрдерд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - рдЙрд╕ рдкрд▓ рд╕реЗ рдХрдВрдЯреЗрдирд░ рдХреЛ рд╕рдбрд╝рдХ рдХреЗ рдХрд┐рдирд╛рд░реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдмрд╛рдж рдХреЗ рд╕рднреА рдЬрд╛рджреВ "рд╣реБрдб рдХреЗ рдиреАрдЪреЗ" рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдРрд╕реА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рднреАрддрд░ рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрд╕рд╛рдорд╛рдиреНрдп рджрд┐рдЦрддрд╛ рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд╣рдо рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдмрддрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рдХрд╛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ:

 class Controller #   . #    . def initialize(invoice_service) @invoice_service = invoice_service end def create_invoice(params) @invoice_service.create(params) end end 

рдкрд░реНрдпрд╛рд╡рд░рдг "рд╕рдордЭрддрд╛ рд╣реИ" рдХреИрд╕реЗ рдирд┐рдпрдВрддреНрд░рдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╣ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рджрд┐рд▓ рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб IoC рдХрдВрдЯреЗрдирд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рддрдВрддреНрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рд╕рдВрднрд╡ рд╣реИред рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдореЗрдВ, рдЕрдм рдЖрдк рд╡рд╣ рд╕рдм рдХреБрдЫ рд╕реВрдЪреАрдмрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрдмрдВрдзрд┐рдд рдШрдЯрдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рд╣реИрдВред рдЕрдм рд░рд╛рдЙрдЯрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВ:

 class Router #         -  #      #     . def initialize(controller) @controller = controller end def handle(path, method, params) #  ""- if path == '/invoices' && method == 'POST' @controller.create(params) end end end 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд░рд╛рдЙрдЯрд░ рдирд┐рдпрдВрддреНрд░рдХ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред рдпрджрд┐ рд╣рдо рдирд┐рд░реНрднрд░рддрд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдирд┐рдпрдВрддреНрд░рдХ рдПрдХ рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ рдШрдЯрдХ рд╣реИ, рдФрд░ рд░рд╛рдЙрдЯрд░ рдПрдХ рдирд┐рд░рдВрддрд░ рдЕрдХреЗрд▓рд╛ рд╣реИред рдпрд╣ рдХреИрд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдШрдЯрдХ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд░реНрдЧреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рджрд┐рдЦрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпреЗ рдлреИрдХреНрдЯреНрд░реА рд╡рд┐рдзрд┐ ( рдлреИрдХреНрдЯреНрд░реА рдореЗрдердб, рдЧреЛрдл ) рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдкреНрд░реЙрдХреНрд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ ( рдкреНрд░реЙрдХреНрд╕реА, рдЧреЛрдПрдл ) рд╣реИрдВ; рд╡реЗ рдЕрд╕рд╛рдЗрди рдХреА рдЧрдИ рд░рдгрдиреАрддрд┐ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдШрдЯрдХ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ "рдХреНрд╖рдгрд┐рдХ" рдХреЗ рд░реВрдк рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд░рд╛рдЙрдЯрд░ рд╣рдореЗрд╢рд╛ рдЕрдкрдиреЗ рдирдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд╣реА рдПрдХреНрд╕реЗрд╕ рдХрд░реЗрдЧрд╛ред рдЕрдиреБрдХреНрд░рдо рдЖрд░реЗрдЦ рдХрд╛рд░реНрдп рдХрд╛ рдПрдХ рдЕрдиреБрдорд╛рдирд┐рдд рддрдВрддреНрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИ:

рдЫрд╡рд┐

рдпрд╛рдиреА рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрди рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдИрдУрд╕реА рдХрдВрдЯреЗрдирд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдЕрдЪреНрдЫрд╛ рдврд╛рдВрдЪрд╛ рднреА рдШрдЯрдХ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЗ рд╕рд╣реА рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд▓реЗрддрд╛ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖


рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рддрдХрдиреАрдХ рдореЗрдВ рдХрд╛рдлреА рдкрд░рд┐рд╖реНрдХреГрдд рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд▓рдЪреАрд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдврд╛рдВрдЪреЗ рдХреЗ рдореВрд▓ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреАрдордд рд╣реИред рдРрд╕реЗ рдврд╛рдВрдЪреЗ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рддрдХрдиреАрдХреА рдкрд╣рд▓реБрдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрд╡реЗрджрди рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХреЗ рдЖрд░рд╛рдорджрд╛рдпрдХ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рдордп рд╕рдорд░реНрдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЙрдЪреНрдЪ рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реЗ DI рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╢реБрд░реВ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдпреЛрдЧреНрдп, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерд┐рдд рдХреЛрдб рд▓рд┐рдЦрддрд╛ рд╣реИред рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рдореЗрд░реЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рд░реВрдврд╝рд┐рд╡рд╛рджреА рдмреИрдХреЗрдВрдб рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдмрд╛рдВрдХрд╛ рд░реВрдкрд░реЗрдЦрд╛ рд╣реИред

Source: https://habr.com/ru/post/hi480364/


All Articles