рдореЗрд░реЗ рдПрдХ рдкрд╛рдардХ рдмреИрд░реА рдЧрд┐рд▓реНрд╕ рдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореБрдЭреЗ рд▓рд┐рдЦрд╛ рдФрд░ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕рд╡рд╛рд▓ рдкреВрдЫрд╛, рдЬреЛ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ:
"рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореИрдВ рдХрд╛рдо рдкрд░ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдпрд╛: рдореИрдВрдиреЗ рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛рдПрдВ рдХреАрдВ рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдВрдЪ рд╕рдореНрдорд┐рд▓рд┐рдд рдХреА - рдПрдХ рдЕрд╢рдХреНрдд рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдорд╛рддрд╛ рддрд░реНрдХ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╕реЗ рд╡рд╛рдкрд╕ рдЖрдП рд╢реВрдиреНрдп рдорд╛рдиреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдореЗрд░реЗ рдкрд╛рд╕ рдирд┐рдЬреА рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдмрдпрд╛рди рдереЗ рдЬреЛ рдореИрдВ рдЕрдкрдиреА рдорд╛рдиреНрдпрддрд╛рдУрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рдерд╛ред
тАЬрдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рд╕рд╛рдерд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдкреНрд░рдЪрд▓рд┐рдд рдЕрднреНрдпрд╛рд╕ рдЪреЗрдХ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдФрд░ рдЧрд┐рд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рд╣реИред рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╕реЗ рдЬреВрдЭ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд░рдХреНрд╖рд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рд╕реЛрдЪрд╛ рдХрд┐ рдпрд╣ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИред рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдореИрдиреБрдЕрд▓ рдФрд░ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣реА рд╣реИред
"рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╕рд▓рд╛рд╣ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдб рдХреЛ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдФрд░ рдлрд┐рд░ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд░рдХреНрд╖рд╛рддреНрдордХ рд╢реИрд▓реА рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рдХреНрдпреЛрдВ рд╣реИ?"
рдЖрдо рддреМрд░ рдкрд░, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд░рдХреНрд╖рд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рджреВрд╕рд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг
рд╕реЗ рдмрджрддрд░ рдпрд╛
рдмреЗрд╣рддрд░ рд╣реИ ред рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░рдХ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЙрддреНрддрд░ рдпрд╣ рд╣реИ:
рдпрд╣ рд╕рднреА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИредрдЗрд╕ рддрд░рд╣ рдХрд╛ рдЬрд╡рд╛рдм, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рддрдм рддрдХ рдмреЗрдХрд╛рд░ рд╣реИ рдЬрдм рддрдХ рд╣рдо рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗ:
рдпрд╣ рдирд┐рд░реНрднрд░рддрд╛ рдХрд┐рди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рд╕реЗ рдкреИрджрд╛ рд╣реЛрддреА рд╣реИ? рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдХреБрдЫ рдХрд╛рд░рдХреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рд╡рд┐рд╖рдп рдХреА рдПрдХ рд╡реНрдпрд╛рдкрдХ рдкреНрд░рд╕реНрддреБрддрд┐ рд╣реИред
рдХреЛрдб рдХреЛ рдЧрд┐рд░рдиреЗ рджреЗрдВред
рд░рдХреНрд╖рд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдореВрд▓реНрдп рдХреНрдпрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рд╕рдм рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рддреБрд░рдВрдд рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрдВ? рдХреНрдпрд╛ рдпрд╣ рдХреЛрдб рдХреЛ рдЧрд┐рд░рдиреЗ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реЛрдЧрд╛? рдЖрдЗрдП рдХреБрдЫ рдирдореВрдирд╛ рдХреЛрдб рджреЗрдЦреЗрдВред
public class ProductDetailsController { private readonly IUserRepository userRepository; private readonly IProductRepository productRepository; private readonly ICurrencyExchange exchange; public ProductDetailsController( IUserRepository userRepository, IProductRepository productRepository, ICurrencyExchange exchange) { this.userRepository = userRepository; this.productRepository = productRepository; this.exchange = exchange; } public ProductDetailsViewModel GetProductDetails(string userId, string productId) { var user = this.userRepository.Get(userId); var targetCurrency = user.PreferredCurrency; var product = this.productRepository.Get(productId); var convertedPrice = this.exchange.Convert(product.UnitPrice, targetCurrency); return new ProductDetailsViewModel { Name = product.Name, Price = convertedPrice.ToString() }; } }
рдЗрд╕ рд╕рд░рд▓
ProductDetailsController
рд╡рд░реНрдЧ рдореЗрдВ,
GetProductDetails
рд╡рд┐рдзрд┐
ProductDetailsViewModel
рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рдЙрддреНрдкрд╛рдж рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЙрддреНрдкрд╛рдж рдХреА рдХреАрдордд рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдкрд╕рдВрджреАрджрд╛ рдореБрджреНрд░рд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрддреНрдкрд╛рдж рдбреЗрдЯрд╛ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд▓рдХреНрд╖реНрдп рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдХреЗрд╡рд▓
null
рдХреА рдЬрд╛рдБрдЪ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред
GetProductDetails
рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдЕрд╕рдлрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рддрдиреЗ рдХреЙрд▓ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ? рдХрд┐рддрдиреА рд╡рд╕реНрддреБрдПрдВ рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рд╣реЛ рд╕рдХрддреА рд╣реИрдВ?
рдХрд╛рдлреА, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдкрдиреА рдирд┐рд░реНрднрд░рддрд╛ рд╕реЗ рдЕрд▓рдЧ, рдХреЛрдб рдХрд╛ рдпрд╣ рдЫреЛрдЯрд╛ рд╕рд╛ рдЯреБрдХрдбрд╝рд╛ рдХрдо рд╕реЗ рдХрдо рдЫрд╣ рдорд╛рдорд▓реЛрдВ рдореЗрдВ
NullReferenceException
рдХреЛ рдлреЗрдВрдХ рд╕рдХрддрд╛ рд╣реИред рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧ рдкреНрд░рдгрд╛рд▓реА рд╕реЗ рддреНрд░реБрдЯрд┐ рд░рд┐рдкреЛрд░реНрдЯ рдорд┐рд▓ рд░рд╣реА рд╣реИред рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдкреЙрдЗрдВрдЯ
GetProductDetails
рд╡рд┐рдзрд┐ рдФрд░ рдлреЗрдВрдХреЗ рдЧрдП рдЕрдкрд╡рд╛рдж рдХреЗ рдкреНрд░рдХрд╛рд░
NullReferenceException
ред рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рд╡рд╛рд▓реА рдЫрд╣ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╣реБрдИ?
рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЧрд┐рд░рдиреЗ рджреЗрдиреЗ рд╕реЗ, рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдирд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред рдФрд░ рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдХреЗрд╕ рд╕реНрдЯрдбреА рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рд╢реЛрд╖рд┐рдд рдХреЛрдб рдЬреЛ рдореБрдЭреЗ рдорд┐рд▓реЗ рдереЗ, рдЙрдирдореЗрдВ 5 рдпрд╛ 6 рд╕реЗ рдЕрдзрд┐рдХ рд▓рд╛рдЗрдиреЗрдВ рдереАрдВ, рдЗрд╕рд▓рд┐рдП рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЬрд▓реНрдж рд╣реА рдПрдХ рдмрд╛рдзрд╛ рдореЗрдВ рд╕реБрдИ рдвреВрдВрдврдиреЗ рдЬреИрд╕рд╛ рдХреБрдЫ рдмрди рд╕рдХрддрд╛ рд╣реИред
рдмрд╕ рдХреЛрдб рдХреЛ рдЧрд┐рд░рдиреЗ рджреЗрдирд╛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрджрд┐ рдЖрдк рдмрд╣реБрдд рдХрдо рд╡рд┐рдзрд┐рдпрд╛рдБ рд▓рд┐рдЦрддреЗ рд╣реИрдВ (рдПрдХ рдРрд╕реА рдкреНрд░рдерд╛ рдЬреЛ рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рд╕реБрдЭрд╛рддрд╛ рд╣реВрдБ), рддреЛ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рд╣реЛрддреА рд╣реИ, рд╡рд╣ рдЗрддрдиреА рдЬрд╝рд░реВрд░реА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд┐рддрдиреА рджреЗрд░ рддрдХ рдЖрдкрдХреЗ рддрд░реАрдХреЗ, рдХрдо рдкреЗрд╢реЗрд╡рд░, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ "рдмрд╕ рдХреЛрдб рдХреЛ рдЧрд┐рд░рдиреЗ рджреЛ" рд▓рдЧрддрд╛ рд╣реИред
рд╕реБрд░рдХреНрд╖рд╛рддреНрдордХ рдмрдЪрд╛рд╡ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ?
рд╕реНрдкрд╖реНрдЯ рджреНрд╡рд╛рд░рдкрд╛рд▓реЛрдВ рдХреЛ
null
рдЬреЛрдбрд╝рдХрд░, рдЖрдк рдЕрдзрд┐рдХ рд╡рд░реНрдгрдирд╛рддреНрдордХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВ:
public class ProductDetailsController { private readonly IUserRepository userRepository; private readonly IProductRepository productRepository; private readonly ICurrencyExchange exchange; public ProductDetailsController( IUserRepository userRepository, IProductRepository productRepository, ICurrencyExchange exchange) { if (userRepository == null) throw new ArgumentNullException("userRepository"); if (productRepository == null) throw new ArgumentNullException("productRepository"); if (exchange == null) throw new ArgumentNullException("exchange"); this.userRepository = userRepository; this.productRepository = productRepository; this.exchange = exchange; } public ProductDetailsViewModel GetProductDetails( string userId, string productId) { var user = this.userRepository.Get(userId); if (user == null) throw new InvalidOperationException("User was null."); var targetCurrency = user.PreferredCurrency; var product = this.productRepository.Get(productId); if (product == null) throw new InvalidOperationException("Product was null."); var convertedPrice = this.exchange.Convert(product.UnitPrice, targetCurrency); if (convertedPrice == null) throw new InvalidOperationException("Converted price was null."); return new ProductDetailsViewModel { Name = product.Name, Price = convertedPrice.ToString() }; } }
рдХреНрдпрд╛ рдпрд╣ рдХреЛрдб рдмреЗрд╣рддрд░ рд╣реИ? рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░рдгреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рд╣рд╛рдБред рдХреЛрдб рдХреЗ рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдЕрдкрд╡рд╛рдж рд╕рдВрджреЗрд╢ рдЖрдкрдХреЛ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдЖрдкрдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдореМрдЬреВрдж
null
рд╕рд╛рде рдЫрд╣ рд╕рдВрднрд╛рд╡рд┐рдд рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдХреМрди рд╕реА рд╕рдВрднрд╡ рд╣реИред рдЕрдЧрд░ рдореИрдВ рд╕рдкреЛрд░реНрдЯ рдореЛрдб рдореЗрдВ рд╣реЛрддрд╛, рддреЛ рдореБрдЭреЗ рдкрддрд╛ рд╣реЛрддрд╛ рдХрд┐ рдореИрдВ рджреЛрдиреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкрдардиреАрдпрддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдмрд┐рдЧрдбрд╝ рдЧрдпрд╛ рд╣реИред
GetProductDetails
рд╡рд┐рдзрд┐ рдХреЛрдб рдХреА рдкрд╛рдВрдЪ рд╕реЗ рдЧреНрдпрд╛рд░рд╣ рд▓рд╛рдЗрдиреЛрдВ рддрдХ рд▓рдВрдмреА рд╣реЛ рдЧрдИ рд╣реИред рд╕реБрд░рдХреНрд╖рд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕реЗ рдЕрдзрд┐рдХ рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рджреЛрдЧреБрдиреА рд╣реЛ рдЧрдИ! рд╡рд┐рдзрд┐ рдХреЗ рд╢рд░реАрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╛рд░реНрдЧ рд╕реБрд░рдХреНрд╖рд╛рддреНрдордХ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рдбреВрдм рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд┐рдзрд┐ рдХреЛ рдмрджрддрд░ рддрд░реАрдХреЗ рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рдиреЗ рд▓рдЧрд╛ред рдпрджрд┐ рдЖрдк рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреЛрдб рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкрдврд╝рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЕрднреНрдпрд╛рд╕ рдЬреЛ рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рдЕрдзрд┐рдХ рдХрдард┐рди рдмрдирд╛рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдПрдХ рд╣рд▓ рдХреА рддрд░рд╣ рдорд╣рд╕реВрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╕рдВрджреЗрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд░рдХреНрд╖рд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЛ рдПрдХ рдмреБрд░рд╛ рдЕрднреНрдпрд╛рд╕ рдорд╛рдирддреЗ рд╣реИрдВред
рд╕реНрдерд┐рд░рддрд╛ред
рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рдФрд░ рдЗрд╕рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░рдХреЛрдВ рдХреЛ рд╕рдВрддреБрд▓рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ? рд╣рд╛рдВ, рдпрд╣ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЖрдкрдХреЛ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдореВрд▓ рдХрд╛рд░рдг рдХреЛ рдХреИрд╕реЗ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рд┐рдПред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдРрд╕реЗ рдХрдИ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдХреЛрдб рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рд▓рд┐рдП, рдХрд╛рд░рдг
рднрд╛рд╖рд╛ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ рдПрдХ
рдЧрд▓рддреА рд╣реИ , рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред
IUserRepository.Get
рдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╛рди рд▓реМрдЯрд╛рдПрдВ
(рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ) рднреА рдЗрдирдкреБрдЯ рд╣реИрдВредрдЙрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЖрдкрдХреЗ рдкрд╛рд╕ рдпрд╛ рддреЛ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, рдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдРрд╕рд╛ рдХреЛрдИ рдЕрд╡рд╕рд░ рдирд╣реАрдВ рд╣реИред рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП, рдПрдХ рдкрд▓ рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдкрдХрд╛ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░
"рдЬрдВрдЧрд▓" рдореЗрдВ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЖрдкрдХрд╛ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рдпрд╛ рдврд╛рдВрдЪрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдк рдЗрдирдкреБрдЯ рдкрд░ рдмрд┐рд▓реНрдХреБрд▓ рднреА рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдЖрдк
рд╕реНрдерд┐рд░рддрд╛ рдХреЗ
рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЖрд╢реНрд╡рд╕реНрдд рд░рд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рди рдХреЗрд╡рд▓ рдЗрдирдкреБрдЯ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдмрд▓реНрдХрд┐ рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рднреА рдПрдХ рд░рдХреНрд╖рд╛рддреНрдордХ рд╢реИрд▓реА рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЖрдк рдЕрдиреНрдп рд╕рдВрджрд░реНрдн рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн (рдпрд╛ рдЕрдиреНрдп рд╢реИрддрд╛рдиреА рдореВрд▓реНрдпреЛрдВ) рдХреЛ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдкрд╣рд▓реЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдЕрдкрдиреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд▓рд┐рдП рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рджреЗ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░
userId = null,
рдпрд╛ (рдЕрдзрд┐рдХ рдкрд░рд┐рд╖реНрдХреГрдд рд░реВрдк рд╕реЗ) рдЕрдЧрд░
user.PreferredCurrency = null.
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реБрдП, рдЖрдкрдХреЛ рдФрд░ рднреА рдЕрдзрд┐рдХ рд░рдХреНрд╖рд╛рддреНрдордХ рднрд╛рд╡ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:
public class ProductDetailsController { private readonly IUserRepository userRepository; private readonly IProductRepository productRepository; private readonly ICurrencyExchange exchange; public ProductDetailsController( IUserRepository userRepository, IProductRepository productRepository, ICurrencyExchange exchange) { if (userRepository == null) throw new ArgumentNullException("userRepository"); if (productRepository == null) throw new ArgumentNullException("productRepository"); if (exchange == null) throw new ArgumentNullException("exchange"); this.userRepository = userRepository; this.productRepository = productRepository; this.exchange = exchange; } public ProductDetailsViewModel GetProductDetails( string userId, string productId) { if (userId == null) throw new ArgumentNullException("userId"); if (productId == null) throw new ArgumentNullException("productId"); var user = this.userRepository.Get(userId); if (user == null) throw new InvalidOperationException("User was null."); if (user.PreferredCurrency == null) throw new InvalidOperationException("Preferred currency was null."); var targetCurrency = user.PreferredCurrency; var product = this.productRepository.Get(productId); if (product == null) throw new InvalidOperationException("Product was null."); if (product.Name == null) throw new InvalidOperationException("Product name was null."); if (product.UnitPrice == null) throw new InvalidOperationException("Unit price was null."); var convertedPrice = this.exchange.Convert(product.UnitPrice, targetCurrency); if (convertedPrice == null) throw new InvalidOperationException("Converted price was null."); return new ProductDetailsViewModel { Name = product.Name, Price = convertedPrice.ToString() }; } }
рдпрд╣, рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд░рдХреНрд╖рд╛рддреНрдордХ рд╢реИрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдФрд░ рднреА рднрдпрд╛рдирдХ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдЕрдм рдЖрдк рди рдХреЗрд╡рд▓ рдЕрдкрдиреА рд╕реБрд░рдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЗрдВрдЯрд░реЗрдХреНрдЯрд┐рдВрдЧ рдХреЛрдб рднреАред рд╕рд░рд╛рд╣рдиреАрдп, рд▓реЗрдХрд┐рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкрдардиреАрдпред
рдЕрдм рддрдХ, рдЬрдм рдореИрдВ "рдЬрдВрдЧрд▓ рдореЗрдВ" рд░рд╣рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рд▓рд┐рдЦрддрд╛ рд╣реВрдВ, рддреЛ рдРрд╕реА рд░рдХреНрд╖рд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЕрднреА рднреА рдЗрд╕ рддрд░рд╣ рд╕реЗ рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐, рдкрд╣рд▓реЗ, рдореИрдВ рд╕рдВрдХрд▓рди рдХрд░реВрдВрдЧрд╛ рд╕рднреА рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреА рдЬрд╛рдБрдЪ рдХреА рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдореИрдВ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд░реНрдЧ рдХреЛ рдкрд╛рд╕ рдХрд░реВрдБрдЧрд╛ рдЬреЛ рд╕рднреА рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
рд╕рдВрд░рдХреНрд╖рд┐рдд рдХреНрд╖реЗрддреНрд░ред
рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЖрдкрдХрд╛ рдХреЛрдб рдПрдХ
рдЖрд╢реНрд░рдп рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд░рд╣рддрд╛ рд╣реИ? рдпрджрд┐ рдЖрдкрдХрд╛ рдХреЛрдб рдХрд┐рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╕рднреА рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЛрдб рдЖрдкрдХреЗ рдФрд░ рдЖрдкрдХреЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЧрдП рд╕рдорд╛рди рдХреЛрдб рдЖрдзрд╛рд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ? рдпрджрд┐ рдЖрдк рдХреБрдЫ рд╕реБрд╕рдВрдЧрдд рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдХреЗ рдПрдХ-рджреВрд╕рд░реЗ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реБрд░рдХреНрд╖рд╛рддреНрдордХ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдЬрд┐рди рдЯреАрдореЛрдВ рдореЗрдВ рдореИрдВрдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдореЗрдВ, рдореИрдВрдиреЗ рд╣рдореЗрд╢рд╛ рдпрд╣ рдорд╛рдирд╛ рдХрд┐ рд╣рдо рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐
null
рдХрднреА рднреА рд╡реИрдз рд░рд┐рдЯрд░реНрди рдореВрд▓реНрдп рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдХреЛрдИ рд╡рд░реНрдЧ рд╕рджрд╕реНрдп
null
рд▓реМрдЯрддрд╛ рд╣реИ, рддреЛ рдмрдЧ рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рд╣реИ, рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдЙрдкрднреЛрдХреНрддрд╛ рдореЗрдВ рдирд╣реАрдВред рдЗрд╕ рдирд┐рдпрдо рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдкрд┐рдЫрд▓реЗ рдХреЛрдб рдХреЛ рдЗрд╕реЗ рдЫреЛрдЯрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
public class ProductDetailsController { private readonly IUserRepository userRepository; private readonly IProductRepository productRepository; private readonly ICurrencyExchange exchange; public ProductDetailsController( IUserRepository userRepository, IProductRepository productRepository, ICurrencyExchange exchange) { if (userRepository == null) throw new ArgumentNullException("userRepository"); if (productRepository == null) throw new ArgumentNullException("productRepository"); if (exchange == null) throw new ArgumentNullException("exchange"); this.userRepository = userRepository; this.productRepository = productRepository; this.exchange = exchange; } public ProductDetailsViewModel GetProductDetails( string userId, string productId) { if (userId == null) throw new ArgumentNullException("userId"); if (productId == null) throw new ArgumentNullException("productId"); var user = this.userRepository.Get(userId); if (user.PreferredCurrency == null) throw new InvalidOperationException("Preferred currency was null."); var targetCurrency = user.PreferredCurrency; var product = this.productRepository.Get(productId); if (product.Name == null) throw new InvalidOperationException("Product name was null."); if (product.UnitPrice == null) throw new InvalidOperationException("Unit price was null."); var convertedPrice = this.exchange.Convert(product.UnitPrice, targetCurrency); return new ProductDetailsViewModel { Name = product.Name, Price = convertedPrice.ToString() }; } }
рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ ... рд▓реЗрдХрд┐рди рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ: рдкрдврд╝реА рдЧрдИ рд╕рдВрдкрддреНрддрд┐рдпрд╛рдВ рднреА рд░рд┐рдЯрд░реНрди рдорд╛рди рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЙрдиреНрд╣реЗрдВ рдпрд╛ рддреЛ рдЬрд╛рдВрдЪ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВ:
public class ProductDetailsController { private readonly IUserRepository userRepository; private readonly IProductRepository productRepository; private readonly ICurrencyExchange exchange; public ProductDetailsController( IUserRepository userRepository, IProductRepository productRepository, ICurrencyExchange exchange) { if (userRepository == null) throw new ArgumentNullException("userRepository"); if (productRepository == null) throw new ArgumentNullException("productRepository"); if (exchange == null) throw new ArgumentNullException("exchange"); this.userRepository = userRepository; this.productRepository = productRepository; this.exchange = exchange; } public ProductDetailsViewModel GetProductDetails( string userId, string productId) { if (userId == null) throw new ArgumentNullException("userId"); if (productId == null) throw new ArgumentNullException("productId"); var user = this.userRepository.Get(userId); var targetCurrency = user.PreferredCurrency; var product = this.productRepository.Get(productId); var convertedPrice = this.exchange.Convert(product.UnitPrice, targetCurrency); return new ProductDetailsViewModel { Name = product.Name, Price = convertedPrice.ToString() }; } }
рдЕрдм рдпрд╣ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рд╣рдо рдХреЛрдб рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╡рд╕реНрдерд╛ рдореЗрдВ рд▓рдЧрднрдЧ рд╡рд╛рдкрд╕ рдЖ рдЧрдП рд╣реИрдВред рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рдкреНрд░рддреНрдпреЗрдХ рд╕рджрд╕реНрдп рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдХ
рдЧреЗрдЯрд╣рд╛рдЙрд╕ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣реИред рдЬрдм рдЖрдк рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рджрд╕реНрдп рдЙрд╕реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреЗрдЦрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж, рдЬрдм рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрджрдд рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рджреЗрдЦрдирд╛ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВред рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕рджрд╕реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛ рдорд╛рдирддрд╛ рд╣реВрдВред рдПрдХ рдХреЛрдб рд░реАрдбрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк рдЧреЗрдЯреНрд╕ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рддрд░реНрдХ рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ рд╕реБрд░рдХреНрд╖рд╛рддреНрдордХ рдЬрд╛рдВрдЪ рд╕реЗ рдмрд╛рдзрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдЬреЛ рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рддреЗ рд╣реИрдВред
Encapsulationред
рдпрджрд┐
null
рд╕рдВрджрд░реНрдн рд▓реМрдЯрд╛рдирд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ, рддреЛ
User
рд╡рд░реНрдЧ, рдпрд╛
Product
рд╡рд░реНрдЧ, рд╕реНрдерд┐рд░рддрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдкрд╛рд▓рди рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЙрд╕реА рддрд░рд╣ рд╕реЗ:
public class User { private string preferredCurrency; public User() { this.preferredCurrency = "DKK"; } public string PreferredCurrency { get { return this.preferredCurrency; } set { if (value == null) throw new ArgumentNullException("value"); this.preferredCurrency = value; } } }
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐
User
рд╡рд░реНрдЧ
рдЕрдкрдиреЗ рдЖрдХреНрд░рдордгрдХрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ
рдмрдЪрд╛рддрд╛ рд╣реИ ред
PreferredCurrency
рд╕рдВрдкрддреНрддрд┐ рдХрднреА рднреА
null
рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЗрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдПрдХ рдЕрдиреНрдп рдирд╛рдо рд╕реЗ рднреА рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ:
рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди ред
рдирд┐рд╖реНрдХрд░реНрд╖ред
рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдордЭрдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░рдХреЛрдВ рдХреЛ рд╕рдордЭрдирд╛ рдпрд╛ рдЕрдкрдиреЗ рдХреЛрдб рдЖрдзрд╛рд░ рдХреЛ рд╕рдордЭрдирд╛ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХрд╛ рдХреЛрдб "рдЬрдВрдЧрд▓" рдореЗрдВ рд░рд╣рддрд╛ рд╣реИ рддреЛ рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рд░рдХреНрд╖рд╛рддреНрдордХ рдирд┐рд░реНрдорд╛рдг рдЖрдкрдХреЛ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрдм рд╡рд╣ рд╕рдВрд░рдХреНрд╖рд┐рдд рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд░рд╣рддрд╛ рд╣реИред рдЖрдЬ рддрдХ, рдореИрдВ рдЗрд╕реЗ рдПрдХ рдЧрдиреНрджрд╛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЧрдиреНрджрд╛ рдХреЛрдб рд▓рд┐рдЦрдХрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ; рд╣рдо рд╕рднреА рдХреЛ
рд░реЗрдВрдЬрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдмрдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ
редрдЕрд╕рдВрд░рдЪрд┐рдд рд╕реБрд░рдХреНрд╖рд╛ рдХреЛрдб рдкрдардиреАрдпрддрд╛ рдХреЛ рдиреБрдХрд╕рд╛рди рдкрд╣реБрдБрдЪрд╛рддрд╛ рд╣реИред рд╕реНрдкреЗрдЧреЗрдЯреА рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд╛ рдХреЛрдб рд╕рд┐рд░реНрдл рдПрдХ рдФрд░ рдмрд╣рд╛рдирд╛ рд╣реИред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╕рдВрд░рдЪрд┐рдд рд░рдХреНрд╖рд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рд╣реИред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдХреНрдпрд╛ рдкрд╕рдВрдж рд╣реИред