рд╕рд╛рдЗрдХрд┐рд▓ рдПрд▓рд┐рдорд┐рдиреЗрдЯрд░: рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдХреЛрдб

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

void SomeMethod(IEmployee lazyguy) { if(lazyguy == null) throw new ArgumentException(тАЬlazyguyтАЭ); // Do something with lazy guy. Fire him, for example. } 


рдХрд┐рд╕реА рдиреЗ рдЗрд╕реЗ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА:

 void SomeMethod(IEmployee lazyguy) { UniversalValidator.CheckNotNull(lazyguy); // Meet with him and talk about motivations } 


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

рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрд▓рдЧ рд╣реИ рдЬрдм рдЖрддреНрдорд╛ рдЖрдирдиреНрджрд┐рдд рд╣реЛрддреА рд╣реИ рдФрд░ рдХреЛрдб рд╕рд╛рдл рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдк рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
 void SomeMethod([NotNull] IEmployee lazyguy) { // Promote him to be head of department } 

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

 public class LazyEmployee : IEmployee { string Name { get; } string LastName { get; } [GreaterThan(VeryCleverGuySalary)] int Salary { get; set; } [Only(true)] bool NeedsPersonalSecretary { get; set; } [TypeOf(typeof(IRoomWithSaunaAndPersonalPlayStation))] IRoom Room { get; set; } } 


рдЕрдм рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕ рдкрд░ рдХрдИ рдмрд╛рд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рд▓реЛрдЧ рд╣рдардкреВрд░реНрд╡рдХ рдЕрдкрдиреЗ рд▓реЙрдЧрд░, рдЕрдкрдиреЗ рдЯреНрд░реИрдХреНрдЯрд░ рдФрд░ рд╕рд╛рдЗрдХрд┐рд▓ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдЕрдиреНрдп рдЦреБрд╢рд┐рдпреЛрдВ рдХреЛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рд╡реИрд╕реЗ, рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ " рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдорд╢реАрди " рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдЗрдХрд┐рд▓ рдмрдирд╛рдИ рд╣реИ?)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, log4net рдЬреИрд╕реА рдЕрдЪреНрдЫреА рдЪреАрдЬреЛрдВ рдиреЗ рдХрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рд╣рдореЗрд╢рд╛ рдЙрддрдирд╛ рддреЗрдЬрд╝ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдЬрд┐рддрдирд╛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рд╛рде, рд▓реЙрдЧрд┐рдВрдЧ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпрдерд╛рд╕рдВрднрд╡ рддреЗрдЬрд╝реА рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдФрд░ рд▓реЙрдЧрд┐рдВрдЧ рд╕реНрд╡рдпрдВ рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреА рдЧрддрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛:
 public class PerisherEmployee : IEmployee { [NotNull, StartingWithUpperCase] string Name { get; } [NotNull, StartingWithUpperCase] string Lastname { get; } [Tracing, WriteToDatabaseEachTransaction, CheckHistory] int Salary{ get; set; } [AbuseEachWhoTriesToBuySomething, Trace] int FreeMoney { get; set; } } 


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

 public class PerisherEmployee : IEmployee { string _name, _lastname; int _salary, _freemoney; string Name { set { if(value == null) throw new ArgumentNullException("value"); if(!IsStartsFromUpperCase(value)) throw new ArgumentOutOfRangeException("value"); _name = value; } get { return _name; } } string Lastname { set { if(value == null) throw new ArgumentNullException("value"); if(!IsStartsFromUpperCase(value)) throw new ArgumentOutOfRangeException("value"); _surname = value; } get { return _surname; } } [Tracing, WriteToDatabaseEachTransaction, CheckHistory] int Salary { get { return _salary; } set { Console.WriteLine("value: {0}", value); DatabaseEngine.SaveSalary(value); _salary = value; if(!CheckHistory(this)) throw new WrongOperationException(); } } int FreeMoney { get { return _freememory; } set { if(value < _freememory) throw new OutOfRangeException(); Console.WriteLine("value: {0}", value); } } } 

рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреЗ рдКрдкрд░ рд╣реИ :) рдЬрдм рдпрд╣ рдмрдврд╝рд┐рдпрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рддреЛ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡рд┐рдХрд▓реНрдк рднреА рд╣реЛрддреЗ рд╣реИрдВ! рдЬрдм рдпрд╣ 5 рдореЗрдВ рд╕реЗ 10 рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ASP.NET рджреНрд╡рд╛рд░рд╛ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдХрдВрд╕реЛрд▓ рдкрд░ рд╕рдВрджреЗрд╢ рдЯреНрд░реЗрд╕ рдХрд░рдирд╛ рдЬрдмрдХрд┐ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдо рдХрд░ рд░рд╣реА рд╣реИ ... рдЖрдк рд╡реЗрдм рдкреЗрдЬ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рджреМрд░рд╛рди рдХрд┐рд╕реА рднреА рд╕рдордп рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдХреИрд╕реЗ? рдмрд╕ рдПрдХ рдкрд╣рд▓реВ рд▓рд┐рдЦреЗрдВ рдЬреЛ рд╕реНрдЯреИрдХ рдХреЛ рдХрд╣реАрдВ рд░рдЦ рджреЗрдЧрд╛ рдФрд░ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдкрд░ рд▓реЗрдЯ рдЬрд╛рдПрдЧрд╛ред рдпрд╛ рдХреБрдЫ рдФрд░, рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдЕрдЬреАрдм рдмрд╛рддреЗрдВред рдореИрдВ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ ... рдЗрд╕ рдмреАрдЪ, рдореИрдВ рд╕рд┐рд░реНрдл рдЙрди рд▓реЗрдЦреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдИ рд▓рд┐рдВрдХ рджреВрдВрдЧрд╛ рдЬрд┐рдирдореЗрдВ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереА:

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


All Articles