рд╕реИрдВрдбреА рдореЗрдЯреНрдЬрд╝ рдбреЗрд╡рд▓рдкрд░ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢

рдЗрд╕ рд╕рд╛рд▓ рдЬрдирд╡рд░реА рдореЗрдВ, Sandi Metz рдиреЗ рд░реВрдмреА рд░реЛрдЧ рдкреЙрдбрдХрд╛рд╕реНрдЯ рдкрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдирд┐рдпрдо рдкреЗрд╢ рдХрд┐рдПред рдЙрд╕реА рд╕рдордп, рдореЗрд░реА рдЯреАрдо рдФрд░ рдореИрдВрдиреЗ рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╢реБрд░реВ рдХреАред рдпрд╣ рд▓реЗрдЦ рдЙрд╕ рдЕрдиреБрднрд╡ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╣рдордиреЗ рдЕрдкрдиреЗ рдирдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЗрди рдирд┐рдпрдореЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рд╣реИред

рдирд┐рдпрдо


  1. рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдХреЛрдб рдХреА 100 рд╕реЗ рдЕрдзрд┐рдХ рд▓рд╛рдЗрдиреЗрдВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред
  2. рд╡рд┐рдзрд┐рдпрд╛рдБ рдХреЛрдб рдХреА 5 рдкрдВрдХреНрддрд┐рдпреЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рд▓рдВрдмреА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред
  3. рдЖрдк рдПрдХ рд╡рд┐рдзрд┐ рдореЗрдВ 4 рд╕реЗ рдЕрдзрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рд╣реИрд╢ рдорд╛рди рдХреЛ рднреА рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
  4. рдирд┐рдпрдВрддреНрд░рдгрдХрд░реНрддрд╛ рдХреЗрд╡рд▓ рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдПрдХ рджреГрд╢реНрдп рдХреЗрд╡рд▓ рдПрдХ рдЪрд░ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рди рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рд┐рдП ( @object.collaborator.value рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИ)ред



рдирд┐рдпрдо рдХрдм рддреЛрдбрд╝рдиреЗ рд╣реИрдВ


рд╕реИрдВрдбреНрд░реА рдХреЛ рдкреИрд░рд╛рдлреЗрдпрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, "рдЖрдк рдирд┐рдпрдореЛрдВ рдХреЛ рддрднреА рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдЪреНрдЫреЗ рдХрд╛рд░рдг рд╣реЛрдВ, рдпрд╛ рдЖрдкрдХрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкрд╛рд░реНрдЯрдирд░ рд╕реНрд╡реАрдХреГрдд рд╣реЛред" рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкрд╛рд░реНрдЯрдирд░ рдпрд╛ рдЕрдкрдиреЗ рдХреЛрдб рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡реНрдпрдХреНрддрд┐ рд╕реЗ рдЕрдиреБрдорддрд┐ рд▓реЗрдиреА рдЪрд╛рд╣рд┐рдПред

рдЗрд╕реЗ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдирд┐рдпрдо рд╕рдВрдЦреНрдпрд╛ 0 рд╣реЛрдиреЗ рджреЗрдВред

100 рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрдХреНрд╖рд╛рдПрдВ


рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдирд┐рдЬреА рддрд░реАрдХреЗ рдереЗ, рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдЫреЛрдЯрд╛ рд░рдЦрдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рдерд╛ред рдЗрд╕рдиреЗ рд╣рдореЗрдВ рдЕрдкрдиреА рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдмрд╣реБрдд рд╕рд╛рдорд╛рдиреНрдп рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ рдХрд┐ рдХрд┐рд╕ рдХреЛрдб рдХреЛ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

рд╣рдо рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪреЗ рдХрд┐ рдЬрдм рд╣рдо 100 рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рддреЛ git diff рд╣рдореЗрдВ рдЬрд░реВрд░реА рдирд╣реАрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИред

рдкреНрд░рддрд┐ рд╡рд┐рдзрд┐ рдХреЛрдб рдХреА 5 рд▓рд╛рдЗрдиреЗрдВ


рд╡рд┐рдзрд┐ рдХрд╛ рдкрд╛рдВрдЪ-рдкрдВрдХреНрддрд┐ рдкреНрд░рддрд┐рдмрдВрдз рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдирд┐рдпрдо рд╣реИред
рд╣рдо рд╕рд╣рдордд рдереЗ рдХрд┐ 'рдЕрдЧрд░', 'рдФрд░', 'рдЕрдВрдд' рднреА рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рджреЛ рд╢рд╛рдЦрд╛рдУрдВ рд╡рд╛рд▓реА 'рдпрджрд┐' рдмреНрд▓реЙрдХ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╢рд╛рдЦрд╛ рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдлрд┐рдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

 def validate_actor if actor_type == 'Group' user_must_belong_to_group elsif actor_type == 'User' user_must_be_the_same_as_actor end end 

5 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИ рдХрд┐ рд╣рдо 'рдПрд▓реНрд╕рд┐рдлрд╝' рдХреЗ рд╕рд╛рде 'рдФрд░' рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред

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

рдкреНрд░рддрд┐ рд╡рд┐рдзрд┐ рдЕрдзрд┐рдХрддрдо 4 рддрд░реНрдХ


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

рджреЗрдЦреЗрдВ рд╕рд╣рд╛рдпрдХреЛрдВ, рдЬреИрд╕реЗ рдХрд┐ 'link_to' рдпрд╛ 'form_for', рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдмреЗрд╢рдХ, рд╣рдордиреЗ рдкрд╛рд░рд┐рдд рддрд░реНрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдП, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рд╣рдо рдирд┐рдпрдо 0 рдкрд░ рд▓реМрдЯ рдЖрдП рдФрд░ рдЕрдЧрд░ рд╣рдореЗрдВ рдмреЗрд╣рддрд░ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛ рддреЛ рдЙрдиреНрд╣реЗрдВ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред

рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рдПрдХ рд╡рд╕реНрддреБ рдкрд░ рдЙрджрд╛рд╣рд░рдг


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

рд╣рдордиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдлреЗрдХрдбреЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ред рдФрд░ рдРрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рдерд╛:

app / facades / dashboard.rb:

 class Dashboard def initialize(user) @user = user end def new_status @new_status ||= Status.new end def statuses Status.for(user) end def notifications @notifications ||= user.notifications end private attr_reader :user end 

рдРрдк / рдХрдВрдЯреНрд░реЛрд▓рд░ / рдбреИрд╢рдмреЛрд░реНрдб_рдХрдВрдЯреНрд░реЛрд▓рд░.рдмреАрдЖрд░:

 class DashboardsController < ApplicationController before_filter :authorize def show @dashboard = Dashboard.new(current_user) end end 

рдРрдк / рд╡рд┐рдЪрд╛рд░ / рдбреИрд╢рдмреЛрд░реНрдб / рд╢реЛ.html.erb:

 <%= render 'profile' %> <%= render 'groups', groups: @dashboard.group %> <%= render 'statuses/form', status: @dashboard.new_status %> <%= render 'statuses', statuses: @dashboard.statuses %> 

'рдбреИрд╢рдмреЛрд░реНрдб' рдХреНрд▓рд╛рд╕ рдЗрдВрдЯрд░реЗрдХреНрдЯрд┐рд╡ рдпреВрдЬрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдкрд╣рд▓реЗ рд╣реА рдЗрд╕рдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЗрдЬреЗрдВрдЯреЗрд╢рди рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдкрд╛рд╕ рдХрд░ рджреЗрддреЗ рд╣реИрдВред

рд╣рдо рдЗрд╕ рдмрд╛рдд рдкрд░ рд╕рд╣рдордд рдереЗ рдХрд┐ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдЪрд░реЛрдВ рдХреЛ рдпрд╛рдж рдХрд░рдирд╛ рдЗрд╕ рд╕реАрдорд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдФрд░ рд╡реЗ рдЗрд╕ рддрдереНрдп рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкреНрд░рдпреБрдХреНрдд рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЙрдкрд╕рд░реНрдЧ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рдордд рд╣реБрдП рдХрд┐ рд╡реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИрдВ:

 def calculate @_result_of_expensive_calculation ||= SuperCalculator.get_started(thing) end 

рдЕрднреВрддрдкреВрд░реНрд╡ рд╕рдлрд▓рддрд╛!


рд╣рдордиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЕрдкрдиреЗ рдкреНрд░рдпреЛрдЧ рдХреЛ рд╕рдлрд▓ рдорд╛рдирд╛, рдЗрд╕реЗ рд╣рдорд╛рд░реА рд╢реЛрдз рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ , рдФрд░ рдЗрди рдирд┐рдпрдореЛрдВ рдХреЛ рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рдЧрд╛рдЗрдб рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ ред

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


All Articles