рд╡реЗрдмрд┐рдирд╛рд░ "рдПрдХ рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рд╕рддреНрдпрд╛рдкрди"



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



рд╕рддреНрдпрд╛рдкрди рдХреНрдпреЛрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИ?


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

рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рд╕рддреНрдпрд╛рдкрди рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдЙрдирдХрд╛ рдЬреНрдЮрд╛рди рд╣рдореЗрдВ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛:

  • рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╕рдордп рд╕рдордп рдХреА рдмрдЪрдд рдХрд░реЗрдВ;
  • рдПрдХ рд╣реА рд░реВрдк рдореЗрдВ рдмрд┐рдЦрд░реЗ рд╣реБрдП рдШрд░-рдирд┐рд░реНрдорд┐рдд рдЪреЗрдХ рдХреЛ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП;
  • рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рдХреЛ рдХреЙрдлреА рд╕рддреНрдпрд╛рдкрди рдХрд╛ рдЕрдкрдирд╛ рдЬреНрдЮрд╛рди рджрд┐рдЦрд╛рдПрдВ :)

рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рд╕рд┐рджреНрдзрд╛рдВрдд рд╣реИ, рдЪрд▓реЛ рдЕрднреНрдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИред

рдХреЗрд╕ рд╕реНрдЯрдбреА рд╡реИрд▓рд┐рдбреЗрд╢рди: рдЗрдВрдЯрд░рдПрдХреНрдЯрд┐рд╡


рддреЛ, C # рдореЗрдВ рд╕рддреНрдпрд╛рдкрди рдХрд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:



рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд░реНрдЧ рдЧреНрд░рд╛рд╣рдХ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рдЦреЗрддреЛрдВ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕реЗрдЯ рд╣реИ: FirstName - рдирд╛рдо, LastName - рдЕрдВрддрд┐рдо рдирд╛рдо, рдЖрдпреБ - рдЖрдпреБред рдФрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд CustomerManager рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рдмрдЪрд╛рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ, рдПрдХ рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ (рдЦрд░реАрджрд╛рд░) CustomerRepository рдореЗрдВ рд╣реИ рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЬреЛрдбрд╝реЗ рдЧрдП рдХрдВрд╕реЛрд▓ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЖрдЗрдП рдПрдХ рдХрд╕реНрдЯрдо рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдПрдХ рдкреНрд░рдмрдВрдзрдХ рдЬреЛ рдХрд╕реНрдЯрдо рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░реЗрдЧрд╛:

void Main() { var customer = new Customer { FirstName = " ", LastName = "", Age = 57, }; var manager = new CustomerManager(); manager.Add(customer); } 

рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдирд┐рдореНрди рдкрд╛рда рдХреЗ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрдЧрд╛:

.

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

 { FirstName = "+79123456789", LastName = "valde@mar.ru", Age = -14, }; 

рдирддреАрдЬрддрди, рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдПрдХ рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╕реНрдЯрдо рдореАрдЯрд░ рднреА рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛:

+79123456789 valde@mar.ru .

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

if (customer.Age < 14 || customer.Age > 180)

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

рд╡реИрд╕реЗ рднреА, рдЙрдкрд░реЛрдХреНрдд рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ ifs рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдФрд░ рдХреЛрдб рдХреА рдПрдХ рдмрдбрд╝реА рд╢реАрдЯ рдорд┐рд▓рддреА рд╣реИред рдмрд╛рд╣рд░реА рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдРрд╕реЗ рдХреЛрдб рдХреЛ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ рдХрд░реЗрдВ?

рдЬреЛрдбрд╝рдиреЗ рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рдорд╛рдиреНрдпрддрд╛ рд╣реИ


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

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдорд╛рд░рд╛ рдЕрдВрддрд┐рдо рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:

 void Main() { var customer = new Customer { FirstName = "Alex2", LastName = "Petrov1", Age = 10, Phone = "+791234567893", Email = "adsf@fadsf3.com" }; var manager = new CustomerManager(); manager.Add(customer); } class Customer { public string FirstName { get; set; } public string LastName { get; set; } public int Age { get; set; } public string Phone { get; set; } public string Email { get; set; } } class CustomerManager { CustomerRepository _repository; CustomerValidator _validator; public CustomerManager() { _repository = new CustomerRepository(); _validator = new CustomerValidator(); } public void Add(Customer customer) { if (!ValidateCustomer(customer)) { return; } _repository.Add(customer); Console.WriteLine($" {customer.FirstName} {customer.LastName}  ."); } private bool ValidateCustomer(Customer customer) { var result = _validator.Validate(customer); if (result.IsValid) { return true; } foreach(var error in result.Errors) { Console.WriteLine(error.ErrorMessage); } return false; } } class CustomerValidator : AbstractValidator<Customer> { public CustomerValidator() { var msg = "   {PropertyName}:  {PropertyValue}"; RuleFor(c => c.FirstName) .Must(c => c.All(Char.IsLetter)).WithMessage(msg); RuleFor(c => c.LastName) .Must(c => c.All(Char.IsLetter)).WithMessage(msg); RuleFor(c => c.Age) .GreaterThan(14).WithMessage(msg) .LessThan(180).WithMessage(msg); RuleFor(c => c.Phone) .Must(IsPhoneValid).WithMessage(msg) .Length(12).WithMessage("    {MinLength}  {MaxLength}.  : {TotalLength}"); RuleFor(c => c.Email) .NotNull().WithMessage(msg) .EmailAddress(); } private bool IsPhoneValid(string phone) { return !(!phone.StartsWith("+79") || !phone.Substring(1).All(c => Char.IsDigit(c))); } } class CustomerRepository { Random _random; public CustomerRepository() { _random = new Random(); } public void Add(Customer customer) { var sleepInSeconds = _random.Next(2, 7); Thread.Sleep(1000 * sleepInSeconds); } } 

рдФрд░ рдереЛрдбрд╝рд╛ рдФрд░ рд╕рд┐рджреНрдзрд╛рдВрдд


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

  1. рдореВрд▓ рддрд░реНрдХ ред рдпрд╣рд╛рдБ GitHub рдХрд╛ рд▓рд┐рдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд╣рд╛рдБ рдЖрдк рдореБрдЦреНрдп рддрд░реНрдХ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
  2. рд╕рд╣рд╛рдпрдХ рддрд░реНрдХ ред FluentValidation.ValidatorAttribute рдЗрд╕ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред
  3. рдкреНрд░рд╕рдВрдЧ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЕрдВрдЧ ред FluentValidation.AspNetCore , FluentValidation.Mvc5 рдФрд░ FluentValidation.WebApi рджреЗрдЦреЗрдВ ред
  4. рдЯреЗрд╕реНрдЯ ред рддрджрдиреБрд╕рд╛рд░, рд╣рдо FluentValidation.Tests.AspNetCore , FluentValidation.Tests.Mvc5 , FluentValidation.Tests.WebApi рдФрд░ FluentValidation.Tests рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред

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

рд╕реА # рдбреЗрд╡рд▓рдкрд░ рдХреЛрд░реНрд╕ рдореЗрдВ рдорд┐рд▓рддреЗ рд╣реИрдВ!

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


All Articles