рдпрд╣ рдкрд╛рда рд▓рд╛рд░рд╡реЗрд▓ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рд╣рдирдореА рдлреНрд░реЗрдорд╡рд░реНрдХ рдореИрдиреБрдЕрд▓ рдХреЗ рдПрдХ рднрд╛рдЧ рдХрд╛ рд░реВрдкрд╛рдВрддрд░рдг рд╣реИред рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рд░реБрдЪрд┐ рдХрд┐рд╕ рдХрд╛рд░рдг рд╣реБрдИ? рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдФрд░ рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдРрд╕реА рд╕рд╛рдорд╛рдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдЪрд░рдг-рджрд░-рдЪрд░рдг рд╡рд┐рд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
- рдЗрдВрдЯрд░реЗрдХреНрдЯрд░реНрд╕ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред
- TDD \ BDD рдХрд╛ рдкреНрд░рджрд░реНрд╢рдиред
рдпрд╣ рддреБрд░рдВрдд рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпреЗ рди рдХреЗрд╡рд▓ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛рдУрдВ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдУрдЖрд░рдПрдо рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ) рдХреЗ рд╕рд╛рде рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░реВрдкрд░реЗрдЦрд╛рдПрдВ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдПрдВ рднреА рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреА рдЕрдкрдиреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╕реНрдХреГрддрд┐ рд╣реИ рдФрд░ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рдХрд╛рд░рдгреЛрдВ рд╕реЗ "рдмреЗрд╕реНрдЯрд┐рдХреНрд╕ рдкреНрд░реИрдХреНрдЯрд┐рдХреНрд╕" рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреА рд╣реИред рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд▓реИрдВрдЧреНрд╡реЗрдЬ рдФрд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рд╕рдмрд╕реЗ рд╕рдлрд▓ рд╕рдорд╛рдзрд╛рди рдЙрдзрд╛рд░ рд▓реЗрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП, рд╡рд┐рд╡рд░рдгреЛрдВ рдореЗрдВ рдЕрдВрддрд░ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдореВрд▓рднреВрдд рдЪреАрдЬреЗрдВ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ, рдЬрдм рддрдХ рдХрд┐ рд╣рдо рдкреАрдПрд▓ рдХреЛ рд╢реБрд░реВ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рддрд┐рдорд╛рди рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рд▓реЗрддреЗ рд╣реИрдВред рдпрд╣ рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдХрд╛рдлреА рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рдФрд░ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рд╢реБрд░реВ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдирдореА (рдорд╛рдгрд┐рдХ) рдврд╛рдВрдЪрд╛ рд╣реИ - рдПрдХ рдХрд╛рдлреА рдирдпрд╛ рдврд╛рдВрдЪрд╛ рдЬреЛ рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рд┐рдореНрдлрдиреА рдХреЛ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдУрдЖрд░рдПрдо "рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдкрд░"ред рдФрд░ рд╕рдХреНрд░рд┐рдп рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд╕рд╛рде рд▓рдХреНрд╖реНрдп рд▓рд╛рд░рд╡реЗрд▓ \ рд▓реБрдореЗрди (php) рдврд╛рдВрдЪрд╛ред
рдЕрдиреБрдХреВрд▓рди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╕рдмрд╕реЗ рддреАрд╡реНрд░ рдХреЛрдг рдХрд╛рдЯ рджрд┐рдП рдЧрдП рдереЗ:
- рдЧрд╛рдЗрдб рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЖрд░рдВрднреАрдХрд░рдг, рдврд╛рдВрдЪреЗ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪреАрдЬреЛрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
- ORM рдПрд▓реЛрдХреЗрдВрдЯ рдХреЛ рдЧреНрд▓реЛрдм рдкрд░ рдЦреАрдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рднрдВрдбрд╛рд░ рдХрд╛ рдХрд╛рдо рднреА рдХрд░рддрд╛ рд╣реИред
- рдИрдореЗрд▓ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдФрд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдЪрд░рдгред
рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рдФрд░ рдЗрд╕ рдкрд░ рдЬреЛрд░ рджрд┐рдпрд╛ рдЧрдпрд╛:
- рдЗрдВрдЯрд░реЗрдХреНрдЯрд░реНрд╕ - рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рдиреНрдпреВрдирддрдо рдЙрдкрдпреБрдХреНрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
- рдЯреЗрд╕реНрдЯ, рдЯреАрдбреАрдбреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрджрдо-рджрд░-рдЪрд░рдг рд╡рд┐рдХрд╛рд╕ред
рдореВрд▓ рд╣рдирдореА рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд╛ рдкрд╣рд▓рд╛ рднрд╛рдЧ, рдЬрд┐рд╕реЗ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдкрд╛рда рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
рдореВрд▓ рдЗрдВрдЯрд░рдПрдХреНрдЯрд┐рд╡ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдкрд╛рда
рдкрд╛рда рдХреЗ рдЕрдВрдд рдореЗрдВ рдЕрдиреБрдХреВрд▓рд┐рдд php рдХреЛрдб рдХреЗ рд╕рд╛рде рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВред
interactor
рдирдИ рд╕реБрд╡рд┐рдзрд╛: рдИрдореЗрд▓ рд╕реВрдЪрдирд╛рдПрдВ
рдлреАрдЪрд░ рдкрд░рд┐рджреГрд╢реНрдп: рдПрдХ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХреЗ рд░реВрдк рдореЗрдВ, рдЬрдм рдореИрдВ рдПрдХ рдкреБрд╕реНрддрдХ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдИрдореЗрд▓ рд╕реВрдЪрдирд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдЪреВрдВрдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рднреА рдирдИ рдкреБрд╕реНрддрдХ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХрд╛ рдИрдореЗрд▓ рдкрддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВрдЧреЗред
рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдЗрдВрдЯрд░реЗрдХреНрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИ, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╣рдирдореА рдЗрдВрдЯрд░реЗрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред
рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдирдИ рдкреБрд╕реНрддрдХреЛрдВ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреБрд╖реНрдЯрд┐ред рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд▓рд┐рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреБрд╕реНрддрдХ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдИрдореЗрд▓ рдкрддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ред
рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдЖрдк рдиреЗрдЯрд╡рд░реНрдХ рдкрд░рдд рд╕реЗ рдЕрдореВрд░реНрдд рдХрд┐рд╕реА рднреА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░реЗрдХреНрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬрдм рдЖрдк рдХреЛрдб рдЖрдзрд╛рд░ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЪреАрдЬреЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рд╡реЗ рдПрдХрд▓ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдмрд╛рдж рдЧреИрд░-рддреБрдЪреНрдЫ рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ, рд╡реЗ рдЖрдорддреМрд░ рдкрд░ рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЖрдк рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдп, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд▓реЙрдЬрд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рдЗрдВрдЯрд░реЗрдХреНрдЯрд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВ; рд╡реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдиреЗрдЯрд╡рд░реНрдХ рд▓реЗрдпрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред
рдХреЙрд▓рдмреИрдХ? рд╣рдореЗрдВ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ!
рдИрдореЗрд▓ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдХреЙрд▓рдмреИрдХ рдЬреЛрдбрд╝рдирд╛ рд╣реИред
рдпрд╣реА рд╣реИ, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рдирдИ рдкреБрд╕реНрддрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдПрдХ рдИрдореЗрд▓ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдореЗрдВ, рд╣рдирдореА рдЗрд╕ рддрд░рд╣ рдХрд╛ рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдореЙрдбрд▓ рдХреЙрд▓рдмреИрдХ рдХреЛ рдПрдХ рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рдорд╛рдирддреЗ рд╣реИрдВред рд╡реЗ рдПрдХрдорд╛рддреНрд░ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡реЗ рдИрдореЗрд▓ рд╕реВрдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рджреГрдврд╝рддрд╛ рдкрд░рдд рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдорд┐рд▓рд╛рддреЗ рд╣реИрдВред
рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди (рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ), рдЖрдк рдХреЙрд▓рдмреИрдХ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рдпрд╣ рдЬрд▓реНрджреА рд╕реЗ рднреНрд░рд╛рдордХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рдПрдХрд▓ рдИрд╡реЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдХрдИ рдХреЙрд▓рдмреИрдХ рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрд░рдо рдореЗрдВ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдХреБрдЫ рдХреЙрд▓рдмреИрдХ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдХреЙрд▓рдмреИрдХ рдХреЛрдб рдХреЛ рдирд╛рдЬреБрдХ рдФрд░ рд╕рдордЭрдиреЗ рдореЗрдВ рдореБрд╢реНрдХрд┐рд▓ рдмрдирд╛рддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдирд┐рд╣рд┐рдд рдХреЗ рдмрдЬрд╛рдп рд╕реНрдкрд╖реНрдЯ рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВред
рдЗрдВрдЯрд░реЗрдХреНрдЯрд░ рдПрдХ рд╡рд╕реНрддреБ рд╣реИ рдЬреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред
рд╡реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдХреЛ рдПрдХ рд╣реА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рджреЗрддреЗ рд╣реИрдВред рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░реЗрдХреНрдЯрд░ рдХреА рдПрдХрдорд╛рддреНрд░ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдФрд░ рдореЗрдердб рдХреЙрд▓реНрд╕ рдХреЛ рдорд┐рд▓рд╛рдирд╛ рд╣реИред
рд╡рд┐рдЪрд╛рд░
рдЗрдВрдЯрд░реЗрдХреНрдЯрд░реНрд╕ рдХрд╛ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдПрдХ рдирдП рд╡рд░реНрдЧ рдореЗрдВ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВред
рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рджреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рддрд░реАрдХреЗ рд▓рд┐рдЦрдиреЗ рдЪрд╛рд╣рд┐рдП: __construct
рдФрд░ call
ред
__invoke
рдХреЗ php рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдХреЙрд▓ рд╡рд┐рдзрд┐ рдореЗрдВ рд╕рдВрд░рдХреНрд╖рд┐рдд рд╕рдВрд╢реЛрдзрдХ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ __invoke
рдорд╛рдзреНрдпрдо рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдРрд╕реА рд╡рд╕реНрддреБрдУрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЙрдкрд▓рдмреНрдз рддрд░реАрдХрд╛ рд╣реИред
рдПрдХ рд╡рд╕реНрддреБ рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЗ рдХреЛрдб рдЖрдзрд╛рд░ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рднреА рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рди рдХреЗрд╡рд▓ рдЫрд┐рдкреА рд╣реБрдИ рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред
рдЯреНрд░реЗрдирд┐рдВрдЧ
рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ "рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛ " рдмреБрдХрд╢реЗрд▓реНрдлрд╝ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ, рдФрд░ рд╣рдо "рдЕрддрд┐рд░рд┐рдХреНрдд рдкреБрд╕реНрддрдХ рдХреЗ рд▓рд┐рдП рдИрдореЗрд▓ рдЕрдзрд┐рд╕реВрдЪрдирд╛" рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдЗрдВрдЯрд░реЗрдХреНрдЯрд░ рд▓рд┐рдЦрдирд╛
рдЖрдЗрдП рд╣рдорд╛рд░реЗ рдЗрдВрдЯрд░реИрдХреНрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдлреЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВ рдФрд░ рдЙрдирдХреЗ рдЯреЗрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдлреЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВ:
$ mkdir lib/bookshelf/interactors $ mkdir tests/bookshelf/interactors
рд╣рдо рдЙрдиреНрд╣реЗрдВ lib/bookshelf
рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВред рдЖрдк рдмрд╛рдж рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреЛрд░реНрдЯрд▓, рдПрдкреАрдЖрдИ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рддрд╛рдмреЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
AddBook
рдЗрдВрдЯрд░рдПрдХреНрдЯрд░ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдПрдХ рдирдпрд╛ рдкрд░реАрдХреНрд╖рдг tests/bookshelf/interactors/AddBookTest.php
рд▓рд┐рдЦреЗрдВ tests/bookshelf/interactors/AddBookTest.php
:
рдЯреЗрд╕реНрдЯ рд╕реВрдЯ рдЪрд▓рд╛рдиреЗ рд╕реЗ Class does not exist
рдПрд░рд░ Class does not exist
рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ AddBook
рдХреНрд▓рд╛рд╕ рдирд╣реАрдВ рд╣реИред рдЖрдЗрдП рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рдлрд╝рд╛рдЗрд▓ lib/bookshelf/interactors/AddBook.php
:
<?php namespace Lib\Bookshelf\Interactors; use Lib\Interactor\Interactor; class AddBook { use Interactor; public function __construct() { } protected function call() { } }
рдЗрд╕ рдХрдХреНрд╖рд╛ рдореЗрдВ рдХреЗрд╡рд▓ рджреЛ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП: __construct
рдбреЗрдЯрд╛ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП call
рдХрд░рдирд╛ред
рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ call
, рдХреЛ рдирд┐рдЬреА рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЖрдк рд▓рд┐рдЦрддреЗ рд╣реИрдВред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдкрд░рд┐рдгрд╛рдо рд╕рдлрд▓ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рджрд┐рдпрд╛ рдерд╛ рдХрд┐ рдСрдкрд░реЗрд╢рди рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИред
рдЪрд▓реЛ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВ:
$ phpunit
рд╕рднреА рдЯреЗрд╕реНрдЯ рдкрд╛рд╕ рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ!
рдЕрдм, рдЪрд▓реЛ рд╣рдорд╛рд░реЗ AddBook
рдЗрдВрдЯрд░рдПрдХреНрдЯрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рдХрд░рддреЗ рд╣реИрдВ!
рдкреБрд╕реНрддрдХ рдирд┐рд░реНрдорд╛рдг
tests/bookshelf/interactors/AddBookTest.php
:
public function testCreateBook() { $result = $this->subjectCall(); $this->assertEquals("The Fire Next Time", $result->book->title); $this->assertEquals("James Baldwin", $result->book->author); }
рдпрджрд┐ рдЖрдк phpunit
рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:
Exception: Undefined property Lib\Interactor\InteractorResult::$book
рдЪрд▓реЛ рд╣рдорд╛рд░реЗ рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛ рдХреЛ рднрд░реЗрдВ, рдлрд┐рд░ рд╕рдордЭрд╛рдПрдВ рдХрд┐ рд╣рдордиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛:
<?php namespace Lib\Bookshelf\Interactors; use Lib\Interactor\Interactor; use Lib\Bookshelf\Book; class AddBook { use Interactor; protected static $expose = ["book"]; private $book = null; public function __construct() { } protected function call($bookAttributes) { $this->book = new Book($bookAttributes); } }
рдпрд╣рд╛рдВ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рджреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рддреЗрдВ:
рд╕реНрдЯреНрд░рд┐рдВрдЧ protected static $expose = ["book"];
book
рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдкрд░рд┐рдгрд╛рдо рд╡рд╕реНрддреБ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЬреЛ рдЗрдВрдЯрд░реЗрдХреНрдЯрд░ рдХреЛ рдмреБрд▓рд╛рдП рдЬрд╛рдиреЗ рдкрд░ рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
call
рд╡рд┐рдзрд┐ Book
рдореЙрдбрд▓ рдХреЛ book
рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рддреА рд╣реИ, рдЬреЛ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧреАред
рдЕрдм рдЯреЗрд╕реНрдЯ рдкрд╛рд╕ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред
рд╣рдордиреЗ Book
рдореЙрдбрд▓ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рд╣реИред
рд╕реЗрд╡рд┐рдВрдЧ рдмреБрдХ
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдирдИ рдкреБрд╕реНрддрдХ рд╣реИ, рдЬрд┐рд╕реЗ рд╢реАрд░реНрд╖рдХ рдФрд░ рд▓реЗрдЦрдХ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рддрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдирд╣реАрдВ рд╣реИред
рд╣рдореЗрдВ рдЗрд╕реЗ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА BookRepository
- BookRepository
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА Failed asserting that null is not null
ред
рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдкреБрд╕реНрддрдХ рдореЗрдВ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ рдЬрдм рдЗрд╕реЗ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред
рдкрд░реАрдХреНрд╖рд╛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рд╕рд╣реЗрдЬреА рдЧрдИ рдкреБрд╕реНрддрдХ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рджреВрд╕рд░рд╛, рдХреЛрдИ рдХрдо рд╕рд╣реА рддрд░реАрдХрд╛ рдЙрд╕ рдкреБрд╕реНрддрдХ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реИред
lib/bookshelf/interactors/AddBook.php
рдореЗрдВ call
рд╡рд┐рдзрд┐ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
protected function call($bookAttributes) { $this->book = Book::create($bookAttributes); }
new Book
рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо Book::create
рдкреБрд╕реНрддрдХ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде Book::create
ред
рд╡рд┐рдзрд┐ рдЕрднреА рднреА рдкреБрд╕реНрддрдХ рд▓реМрдЯрд╛рддреА рд╣реИ, рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЗрд╕ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рднреА рд╕рд╣реЗрдЬрддреА рд╣реИред
рдпрджрд┐ рдЖрдк рдЕрдм рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рд╣реЛ рдЧрдП рд╣реИрдВред
рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди
рдЖрдЗрдП рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдЯреЗрд╕реНрдЯ рдЕрднреА рднреА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ (рд╕рдлрд▓ рдмрдЪрдд рдХреЗ рдмрд╛рдж рдЖрдИрдбреА рд╕рдВрдкрддреНрддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ)ред рдпрд╣ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рд╣реИ рдХрд┐ рд╕рдВрд░рдХреНрд╖рдг рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рд╕рд╣реЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдпреВрдпреВрдЖрдИрдбреА рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдИрдбреА рдХреЙрд▓рдо рднрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдмрдЪрдд рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рд╕рдлрд▓ рд░рд╣реА рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред
рд╣рдо рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдЗрдВрдЯрд░реЗрдХреНрдЯрд░ рдХреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдЗрд╕рдХреА рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд╛рд╣рд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдХрд╛рд░рдг рдЗрд╕рдХрд╛ рдЯреВрдЯрдирд╛ рдХрдо рд╣реЛрдЧрд╛ред
рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рдпрд╣ рдПрдХ рд╣реА рд╣реИ, рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рдХреЛрдб рдХреЗ рд╕рд╛рде, рдПрдХ repository
рд╕рдВрдкрддреНрддрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПред
рдЕрднреА, рдкрд░реАрдХреНрд╖рдг рдпрд╣ create
рддрд░реАрдХреЗ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рдЗрд╕рдХреА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ $this->assertNotNull($result->book->id)
рд╕реЗ рднрд░рд╛ рд╣реБрдЖ $this->assertNotNull($result->book->id)
ред
рдпрд╣ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рд╣реИред
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдкрд░реАрдХреНрд╖рдг рдХреЛ рдХреЗрд╡рд▓ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ create
рд╡рд┐рдзрд┐ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдкрд░ рдХреЙрд▓ рдХреА рдЧрдИ рдереА, рдФрд░ рдпрд╣ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдмрдЪрд╛рдПрдЧрд╛ (рдЪреВрдВрдХрд┐ рдпрд╣ рдЗрд╕рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╣реИ)ред
рдЖрдЗрдП testPersistsBook
рдкрд░реАрдХреНрд╖рдг рдмрджрд▓реЗрдВ:
рдЕрдм рд╣рдорд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рдЗрд╕рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреА рд╕реАрдорд╛рдУрдВ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рд╣рдордиреЗ рдЬреЛ рднреА рдХрд┐рдпрд╛ рд╡рд╣ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдкрд░ рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдерд╛ред
рдИрдореЗрд▓ рдЕрдзрд┐рд╕реВрдЪрдирд╛
рдЪрд▓реЛ рдПрдХ рдИрдореЗрд▓ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдЬреЛрдбрд╝реЗрдВ!
рдЖрдк рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрд╕рдПрдордПрд╕ рднреЗрдЬреЗрдВ, рдЪреИрдЯ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдВ рдпрд╛ рд╡реЗрдм рд╣реБрдХ рд╕рдХреНрд░рд┐рдп рдХрд░реЗрдВред
рд╣рдо рд╕рдВрджреЗрд╢ рдмреЙрдбреА рдХреЛ рдЦрд╛рд▓реА рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╡рд┐рд╖рдп рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╣рдо "рдмреБрдХ рдПрдб!" рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВрдЧреЗред
рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдкрд░реАрдХреНрд╖рдг tests/bookshelf/mail/BookAddedNotificationTest.php
:
<?php use Lib\Bookshelf\Mail\BookAddedNotification; use Illuminate\Support\Facades\Mail; class BookAddedNotificationTest extends TestCase { public function setUp() { parent::setUp(); Mail::fake(); $this->mail = new BookAddedNotification(); } public function testCorrectAttributes() { $this->mail->build(); $this->assertEquals('no-reply@example.com', $this->mail->from[0]['address']); $this->assertEquals('admin@example.com', $this->mail->to[0]['address']); $this->assertEquals('Book added!', $this->mail->subject); } }
рдЕрдзрд┐рд╕реВрдЪрдирд╛ рд╡рд░реНрдЧ lib/Bookshelf/Mail/BookAddedNotification.php
рдЬреЛрдбрд╝реЗрдВред
<?php namespace Lib\Bookshelf\Mail; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; class BookAddedNotification extends Mailable { use SerializesModels; public function build() { $this->from('no-reply@example.com') ->to('admin@example.com') ->subject('Book added!'); return $this->view('emails.book_added_notification'); } }
рдЕрдм рд╣рдорд╛рд░реЗ рд╕рд╛рд░реЗ рдЯреЗрд╕реНрдЯ рдкрд╛рд╕ рд╣реЛ рдЧрдП!
рд▓реЗрдХрд┐рди рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдЕрднреА рддрдХ рдирд╣реАрдВ рднреЗрдЬреА рдЧрдИ рд╣реИред рд╣рдореЗрдВ рдЕрдкрдиреЗ AddBook
рдЗрдВрдЯрд░реЗрдХреНрдЯрд░ рд╕реЗ AddBook
рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
AddBook
рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП AddBook
рдкрд░реАрдХреНрд╖рдг AddBook
рдХрд┐ рдореЗрд▓рд░ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛:
public function testSendMail() { Mail::fake(); $this->subjectCall(); Mail::assertSent(BookAddedNotification::class, 1); }
рдпрджрд┐ рд╣рдо рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ: The expected [Lib\Bookshelf\Mail\BookAddedNotification] mailable was sent 0 times instead of 1 times.
ред
рдЕрдм рд╣рдо рдЗрдВрдЯрд░рдПрдХреНрдЯрд░ рдореЗрдВ рд╕реВрдЪрдирд╛ рднреЗрдЬрдиреЗ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВред
public function __construct(Book $repository, BookAddedNotification $mail) { $this->repository = $repository; $this->mail = $mail; } protected function call($bookAttributes) { $this->book = $this->repository->create($bookAttributes); Mail::send($this->mail); }
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЗрдВрдЯрд░реЗрдХреНрдЯрд░ рдИрдореЗрд▓ рдореЗрдВ рдкреБрд╕реНрддрдХ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕реВрдЪрдирд╛ рднреЗрдЬреЗрдЧрд╛ред
рдирд┐рдпрдВрддреНрд░рдХ рдПрдХреАрдХрд░рдг
рдЕрдВрдд рдореЗрдВ, рд╣рдореЗрдВ рдЗрдВрдЯрд░реИрдХреНрд╢рдирд░ рдХреЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдПрдХреНрд╢рди рдлрд╝рд╛рдЗрд▓ app/Http/Controllers/BooksCreateController.php
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
<?php namespace App\Http\Controllers; use Lib\Bookshelf\Interactors\AddBook; use Illuminate\Http\Request; use Illuminate\Http\Response; class BooksCreateController extends Controller { public function __construct(AddBook $addBook) { $this->addBook = $addBook; } public function call(Request $request) { $input = $request->all(); ($this->addBook)($input); return (new Response(null, 201)); } }
рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдЫреЛрдЯреА рд╕реА рд╕рдорд╕реНрдпрд╛ рд╣реИред
рд╣рдо рдкреБрд╕реНрддрдХ рдирд┐рд░реНрдорд╛рдг рдХреЛрдб рдХрд╛ рджреЛ рдмрд╛рд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдмреБрд░рд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕реЗ рдЗрдВрдЯрд░реИрдХреНрдЯрд░реНрд╕ рдХреЗ рдПрдХ рдЕрдиреНрдп рд▓рд╛рдн рдХреЛ рджрд┐рдЦрд╛рддреЗ рд╣реБрдП рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдо рдкрд░реАрдХреНрд╖рдг рдореЗрдВ BookRepository
рдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХреЛ рд╣рдЯрд╛рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реЗ AddBook
рдЗрдВрдЯрд░реЗрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП рдореЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
<?php use Lib\Bookshelf\Interactors\AddBook; class BooksCreateControllerTest extends TestCase { public function testCallsInteractor() { $attributes = ['title' => '1984', 'author' => 'George Orwell']; $addBook = Mockery::mock(AddBook::class); $this->app->instance(AddBook::class, $addBook); $addBook->expects()->__invoke($attributes); $response = $this->call('POST', '/books', $attributes); } }
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рд╣реЛ рдЧрдП рд╣реИрдВ рдФрд░ рд╡реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИрдВ!
рдХрд╛рд░реНрд░рд╡рд╛рдИ рдЗрдирдкреБрдЯ (http рдЕрдиреБрд░реЛрдз рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рд╕реЗ) рд▓реЗрддреА рд╣реИ рдФрд░ рдЗрдВрдЯрд░реЗрдХреНрдЯрд░ рдХреЛ рдЕрдкрдирд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреБрд▓рд╛рддреА рд╣реИред рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдПрдХрдорд╛рддреНрд░ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реА рд╣реИред рдФрд░ рдЗрдВрдЯрд░рдПрдХреНрдЯрд░ рд╣рдорд╛рд░реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдХреНрд░рд┐рдпрд╛рдУрдВ рдФрд░ рдЙрдирдХреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред
рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рд╕реЗ рдЫреВрдЯ рджреА рдЧрдИ рд╣реИред
рдЬрдм рд╣рдо рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдпрд╛ рдЙрд╕рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ, рдЖрдк рд╕рдВрднрд╡рддрдГ рдЙрдкрд░реЛрдХреНрдд рддрд░реНрдХ рд╕реЗ рдЕрдзрд┐рдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рд╕рдлрд▓ рд╣реИред рдФрд░ рдпрджрд┐ рдХреЛрдИ рд╡рд┐рдлрд▓рддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЖрдк рдЗрдВрдЯрд░реИрдХреНрдЯрд░ рд╕реЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред
рдХреЛрдб рдХреЗ рд╕рд╛рде рднрдВрдбрд╛рд░