рдбрд┐рдЬрд╛рдЗрди рдХреА "рдЧрдВрдз": рдЕрд╕реНрдерд╛рдпреА рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА

рдпрд╣ рдкреЛрдХрд╛-рдпреЛрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдкрд╣рд▓реА рдкреЛрд╕реНрдЯ рд╣реИ - рдЬрд┐рд╕реЗ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ ред

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

рдПрдХ рдХрдЯреНрдЯрд░рдкрдВрдереА рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдмреАрд╕реАрдПрд▓ (рдПрдлрд╕реАрдПрд▓) рд╕рд╣рд┐рдд рдХрдИ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВред BCL рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, EndpointAddressBuilder рд╡рд░реНрдЧ рдХрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрдкрдпреЛрдЧ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд░рдирдЯрд╛рдЗрдо рдкрд░ рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:
var b = new EndpointAddressBuilder(); var e = b.ToEndpointAddress(); 

рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдпреВрдЖрд░рдЖрдИ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ:
 var b = new EndpointAddressBuilder(); b.Uri = new UriBuilder().Uri; var e = b.ToEndpointAddress(); 

рдПрдкреАрдЖрдИ рдХреЛрдИ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдпреВрдЖрд░рдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрд╣рд╛рдВ, URI рдкреНрд░реЙрдкрд░реНрдЯреА рд╕реЗрдЯ рдХрд░рдиреЗ рдФрд░ ToEndpointAddress рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмреАрдЪ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдХрдиреЗрдХреНрд╢рди рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред
рдЕрдЧрд▓рд╛, рд╣рдо рдПрдХ рдЕрдзрд┐рдХ рд╕рдВрдкреВрд░реНрдг рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВрдЧреЗ, рдФрд░ рдореИрдВ рдкреЛрдХрд╛-рдпреЛрдХ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рджреВрдВрдЧрд╛ред

"рдЧрдВрдз" рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдгред
рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдЧрдВрдз рд╡рд░реНрдЧ рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рдЕрдзрд┐рдХ рд╕рд╛рд░ "рдЧрдВрдз" рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЦреБрд▓рд╛ рдПрдкреАрдЖрдИ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
 public class Smell { public void Initialize(string name) public string Spread() } 

рд╢рдмреНрджрд╛рд░реНрде, рдЖрд░рдВрднрд┐рдХ рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рдХреБрдВрдЬреА рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рд╕реНрддрд░ рдкрд░, рдпрд╣ рдПрдкреАрдЖрдИ рдЕрд╕реНрдерд╛рдпреА рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:
 var s = new Smell(); var n = s.Spread(); 

рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╕реНрдкреНрд░реЗрдб рд╡рд┐рдзрд┐ рдПрдХ InvalidOperationException рдлреЗрдВрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдирд╛рдо рдХреЗ рд╕рд╛рде рдЧрдВрдз рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕реНрдореЗрд▓ рдХреНрд▓рд╛рд╕ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд╣ рдЕрдкрдиреЗ рдЖрдХреНрд░рдордгрдХрд╛рд░рд┐рдпреЛрдВ рдХреА рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд░рдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдЯреВрдЯ рдЧрдпрд╛ рд╣реИред
рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд┐рдзрд┐ рдХреЛ рд╕реНрдкреНрд░реЗрдб рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
 var sut = new Smell(); sut.Initialize("   "); var n = sut.Spread(); 

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

рдлрд┐рдХреНрд╕: рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдВрдЬреЗрдХреНрд╢рди
рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╡рд░реНрдЧ рдХрднреА рднреА рдкрд░рд╕реНрдкрд░ рд╡рд┐рд░реЛрдзреА рдЕрд╡рд╕реНрдерд╛ рдореЗрдВ рди рд╣реЛред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдирд╛рдо рд╕реНрдореЗрд▓ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЗрд╕рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЧрд╛рд░рдВрдЯреА рдХреЛ рдХрдХреНрд╖рд╛ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХреЗ рд╕рд╛рде рдирд╛рдо рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рддреЛ Smell рд╡рд░реНрдЧ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рд╕реЗ рдирд╛рдо рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
 public class Fragrance : IFragrance { private readonly string name; public Fragrance(string name) { if (name == null) { throw new ArgumentNullException("name"); } this.name = name; } public string Spread() { return this.name; } } 

рдпрд╣ рдПрдХ рдкреНрд░рднрд╛рд╡реА рдЧрд╛рд░рдВрдЯреА рд╣реИ рдХрд┐ рдирд╛рдо рд╣рдореЗрд╢рд╛ рдХрдХреНрд╖рд╛ рдХреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред рдЕрдиреНрдп рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рднрд╛рд╡ рднреА рдпрд╣рд╛рдВ рдореМрдЬреВрдж рд╣реИрдВ:

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрднреА-рдХрднреА рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХрдХреНрд╖рд╛ рдХрд╛ рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрд╕реНрдерд╛рдпреА рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
 public interface ISmell { void Initialize(string name); string Spread(); } 

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

рдлрд┐рдХреНрд╕: рдЕрдореВрд░реНрдд рдХрд╛рд░рдЦрд╛рдирд╛
ISmell рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рд╣рд╛ рд╣рд╛) рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╛рд░рдВрдн рд╡рд┐рдзрд┐ рдХреЛ рдПрдХ рдирдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред (рдЕрд╕рдВрдЧрдд) рд╡рд░реНрдЧ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдмрдирд╛рдПрдБ (рдкреВрд░реНрд╡ рдореЗрдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ) рд╡рд┐рдзрд┐ рдЖрдИрдлрд╝реНрд░реЗрдЧрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реИ:
 public interface IFragranceFactory { IFragrance Create(string name); } 

рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
 public class FragranceFactory : IFragranceFactory { public IFragrance Create(string name) { if (name == null) { throw new ArgumentNullException("name"); } return new Fragrance(name); } } 

рдпрд╣ рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рджреЛрдиреЛрдВ рд╡рд░реНрдЧ - рдлреНрд░реЗрдЧрд░реЗрдВрд╕рдлреИрдХреНрдЯреНрд░реА рдФрд░ рдлреНрд░реЗрдЧрд░реЗрдВрд╕ рдЕрдкрдиреЗ рдЖрдХреНрд░рдордгрдХрд╛рд░рд┐рдпреЛрдВ рдХреА рд░рдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред рд╡реЗ рдХрднреА рднреА рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗред рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдЬрд┐рд╕рдиреЗ рдкрд╣рд▓реЗ ISmell рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреА рдереА, рдЕрдм рдЙрд╕реА рд╡рд┐рдХрд▓реНрдк рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП IFragranceFactory / IFragrance рд╕рдВрдпреЛрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
 var f = factory.Create(name); var n = f.Spread(); 

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

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


All Articles