рд▓реЗрдЦ рдЗрд╕ рддрдереНрдп рд╕реЗ рдкреИрджрд╛ рд╣реБрдЖ рдерд╛ рдХрд┐ рдореБрдЭреЗ рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рд╕рд░рд▓ рдЕрд╡рд░реЛрдзрди рддрдВрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЬрд┐рд╕реЗ рдПрдУрдкреА рддрдХрдиреАрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрд╛рдлреА рдХреБрдЫ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ (Casle.net, Spring.net, LinFu, рдЗрддреНрдпрд╛рджрд┐) рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд░рди-рдЯрд╛рдЗрдо рдкрд░ IL-code рдореЗрдВ рдбрд╛рдпрдирд╛рдорд┐рдХ рдЪрд╛рдЗрд▓реНрдб рдХреНрд▓рд╛рд╕реЗрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯреЗрдб рдХреНрд▓рд╛рд╕реЗрд╕ рдкрд░ рд╕рдорд╛рди рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ: рдирд╣реАрдВ рд╕реНрдерд┐рд░, рдЕрдирд╕реЗрд▓реНрдб, рд╡рд┐рдзрд┐рдпрд╛рдБ рдФрд░ рдЧреБрдг рдЖрднрд╛рд╕реА рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рдЖрджрд┐ ...
рдЕрдиреНрдп рдЕрд╡рд░реЛрдзрди рддрдВрддреНрд░реЛрдВ рдХреЛ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдпрд╛ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреА рдЦрд░реАрдж рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдореИрдВ рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рдХреЛ рдмрд░реНрджрд╛рд╢реНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ ...
рдкрд░рд┐рдЪрдп
рдПрдУрдкреА - рдкрд╣рд▓реВ рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рдУрдкреА рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐
рдкрд╣рд▓реВ рдХреНрдпрд╛
рд╣реИ ред рдмрд╛рдж рдореЗрдВ рдПрдХ рд▓реЗрдЦ рдореЗрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВред
рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд╢реБрд░реБрдЖрддреА рд╕реНрддрд░ рдкрд░ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред рдЖрдЧреЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХрдорд╛рддреНрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдЬреНрдЮрд╛рди рд╣реИред
рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рд╕рдордЭрдиреЗ рд╕реЗ рдЖрдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭ рдкрд╛рдПрдВрдЧреЗред рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рднреА рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рд▓реЗрдЦ рдХрд╛рдлреА рдмрдбрд╝рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдЖрдк рдКрдм рдЧрдП рд╣реИрдВ рдпрд╛ рдердХ рдЧрдП рд╣реИрдВ, рддрдм рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднрд╛рдЧ рдХреЛ рджреЗрдЦреЗрдВред рдЖрдк рд╣рдореЗрд╢рд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд░ рд▓реМрдЯ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдиреБрднрд╡реА рдбреЗрд╡рд▓рдкрд░реНрд╕, рдЗрд╕реЗ рдкрдврд╝реЗрдВ!
рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдУрдкреА рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рддреЛ рдордд рдЫреЛрдбрд╝реЛ!
рдореБрдЭреЗ рдпрд╣реАрдВ рдЫреЛрдбрд╝ рджреЛ рдФрд░ рдЕрдм рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд░реВрдВрдЧрд╛ ...
рдореИрдВ рдЕрд╡рд░реЛрдзрди рдХреА рддрдХрдиреАрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛, рдЬреЛ рдЕрд╡рд░реЛрдзрди рдХрд░реЗрдЧреА:
тАв рдХреЛрдИ рднреА рд╡рд░реНрдЧ (рд╕реАрд▓, рд╕реНрдерд┐рд░, рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рдХрд╛рд░ рд╕рд╣рд┐рдд)
тАв рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░
тАв рдЯрд╛рдЗрдк рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░
тАв рдЙрджрд╛рд╣рд░рдг рдХреЗ рддрд░реАрдХреЗ, рдЧреБрдг рдФрд░ рдШрдЯрдирд╛рдПрдБ (рднрд▓реЗ рд╣реА рд╡реЗ рдЖрднрд╛рд╕реА рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рди рд╣реЛрдВ)
тАв рд╕реНрдереИрддрд┐рдХ рддрд░реАрдХреЗ, рдЧреБрдг, рдФрд░ рдШрдЯрдирд╛рдПрдБ
рдмрд┐рдирд╛:
тАв рдЕрдкрдиреЗ рдХреЛрдб рдФрд░ рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рддрд╛ рд╣реИ
тАв IL рдХреЛрдб рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░рдирд╛
тАв рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдХреБрдЫ рдмрдирд╛рдПрдВ
тАв рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрди
тАв рдХреБрдЫ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреБрдирдХрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рд░реНрд╢рд▓рдмреАрдл)
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рдо рд╕реНрд╡рдЪреНрдЫ рдкреНрд░рдмрдВрдзрд┐рдд рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ рдЬреЛ .Net 1.1 рдкрд░ рдЪрд▓рд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ (рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВ рдереЛрдбрд╝рд╛ Linq рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЗрд╕рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ) рдФрд░ рдЖрдкрдХреЗ рд╕рд┐рд░ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЛ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдо рдЕрдВрдд рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░реЗрдВрдЧреЗред рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:
тАв рдЖрдк System.DateTime.Now рдФрд░ System.IO.File рдЬреИрд╕реЗ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЛ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВ!
тАв рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рднреА рд▓реЛрдХрдкреНрд░рд┐рдп рдЗрдВрдЯрд░рд╕реЗрдкреНрд╢рди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╕реАрдорд╛рдПрдВ рд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реЛрдВрдЧреАред
рдЕрднреА рднреА рд╕рдВрджреЗрд╣ рдореЗрдВ рд╣реИ? рдлрд┐рд░ рдкрдврд╝реЛ!
рдПрдУрдкреА рд╕рд┐рджреНрдзрд╛рдВрдд
рдкреГрд╖реНрдарднреВрдорд┐
рдХреБрдЫ рд▓реЛрдЧ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕реАрдЦрдиреЗ рдХрд╛ рдЙрдирдХрд╛ рддрд░реАрдХрд╛ рдЕрднреА рддрдХ рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рдФрд░ рдХреНрдпрд╛ рдпрд╣ рдХрдард┐рди рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдЕрдзреНрдпрдпрди рдХреА рдЧрдИ рд╕рднреА рдкреНрд░рдерд╛рдУрдВ рдХреЛ рдЫреЛрдбрд╝рддреЗ рд╣реБрдП OOP рд╕реЗ AOP рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рд╣реИ? рдЙрддреНрддрд░ рд╕рд░рд▓ рд╣реИ: рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред OOP рдФрд░ AOP рдХреЗ рдмреАрдЪ рдХреЛрдИ рдЯрдХрд░рд╛рд╡ рдирд╣реАрдВ рд╣реИ! AOP рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рднреНрд░рд╛рдордХ рд╣реИред рдПрдУрдкреА рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рд╕рдордЭрдирд╛ рдЖрдкрдХреЛ рдХрдХреНрд╖рд╛рдУрдВ, рд╡рд╕реНрддреБрдУрдВ, рд╡рд┐рд░рд╛рд╕рдд, рдмрд╣реБрд░реВрдкрддрд╛, рдЕрдореВрд░реНрддрддрд╛ рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдУрдУрдкреА рдореЗрдВ рдЙрдкрдпреЛрдЧ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╣рд░ рдЪреАрдЬ рдХреЛ рдирд╣реАрдВ рдЦреЛ рдкрд╛рдПрдВрдЧреЗред
рдкреНрд░рд╛рдЪреАрди рд╕рдордп рдореЗрдВ, рдЬрдм рдЗрдВрдЯрд░рдиреЗрдЯ рдореЗрдВ рдкреАрд▓реЗ рдкреГрд╖реНрда, рдмреБрд▓реЗрдЯрд┐рди рдмреЛрд░реНрдб рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкреГрд╖реНрда рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рдереЗ, рддреЛ рдХреБрдЫ рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХреЛрдВ рдХреЛ рдкрдврд╝рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдерд╛ (рдирдИ рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рдЯрд┐рдкреНрдкрдгреА: рдПрдХ рдкреБрд╕реНрддрдХ рдПрдХ рдкреЗрдкрд░ рд╢реАрдЯ рд╕реЗ рдмрдирд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╕рд╛рде рдкрд╛рда рд╣реЛрддрд╛ рд╣реИ)ред рдФрд░ рдЗрдирдореЗрдВ рд╕реЗ рд▓рдЧрднрдЧ рд╕рднреА рдкреБрд╕реНрддрдХреЗрдВ рдЖрдкрдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд OOP рдирд┐рдпрдореЛрдВ рдХреА рдпрд╛рдж рджрд┐рд▓рд╛рддреА рд╣реИрдВ:
тАв рдирд┐рдпрдо рд╕рдВрдЦреНрдпрд╛ 1: рдбреЗрдЯрд╛ рдФрд░ рдХреЛрдб рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
тАв рдирд┐рдпрдо рд╕рдВрдЦреНрдпрд╛ 2: рдирд┐рдпрдо рд╕рдВрдЦреНрдпрд╛ 1 рдХреЛ рдХрднреА рди рддреЛрдбрд╝реЗрдВ
рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рдерд╛ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП OOP рддреАрд╕рд░реА рдкреАрдврд╝реА рдХреА рднрд╛рд╖рд╛рдУрдВ (3GL) рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред
рд╡рд┐рдХреА рд╕реЗ:
рдПрдиреНрдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рджреЛ рд╕рдорд╛рди, рд▓реЗрдХрд┐рди рдЕрд▓рдЧ-рдЕрд▓рдЧ, рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдФрд░ рдХрднреА-рдХрднреА, рдЙрдирдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
тАв рд╡рд╕реНрддреБ рдХреЗ рдХреБрдЫ рдШрдЯрдХреЛрдВ рддрдХ рдкрд╣реБрдБрдЪ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдирд╛ред
тАв рдПрдХ рдРрд╕реА рднрд╛рд╖рд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдЬреЛ рдЙрд╕ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рддрд░реАрдХреЛрдВ (рдпрд╛ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ) рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдПрдУрдкреА рдЖрдо рддреМрд░ рдкрд░ рджрд╛рд╡рд╛ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрднреА-рдХрднреА рдПрдХ рднрд╛рд╖рд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЛрдВ (рдпрд╛ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ) рдХреЗ рдПрдХреАрдХрд░рдг рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЗ рдмрд┐рдирд╛ рд╕рдордЭрд╛рдпрд╛ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕реЗ рдкрдХрдбрд╝рд╛? рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдЖрдкрдХреЛ рд╕рд┐рджреНрдзрд╛рдВрдд рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛!
рдЕрдм, рджреЛ рдЙрднрд░рддреЗ рдореБрджреНрджреЛрдВ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ:
тАв рдпрд╣ "рдХрднреА-рдХрднреА" рдХрдм рд╣реЛрддрд╛ рд╣реИ?
тАв рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?
AOP рдХреЗ рд▓рд╛рднреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ ... рдХреБрдЫ рдкрд░рд┐рджреГрд╢реНрдп
рдкрд░рд┐рджреГрд╢реНрдп рдП
рдЖрдк рдмреИрдВрдХ рдореЗрдВ рдПрдХ рдбреЗрд╡рд▓рдкрд░ рд╣реИрдВред рдмреИрдВрдХ рдХреА рдмрдбрд╝реА рд╡реНрдпрд╡рд╕реНрдерд╛ рд╣реИред рдХрд╛рд░реЛрдмрд╛рд░ рд╕реНрдерд┐рд░ рд╣реИред рд╕рд░рдХрд╛рд░ рдмреИрдВрдХреЛрдВ рдХреЛ рдЕрдзрд┐рдХ рдкрд╛рд░рджрд░реНрд╢реА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд░рдорд╛рди рдЬрд╛рд░реА рдХрд░рддреА рд╣реИред рдзрди рдХреЗ рдХрд┐рд╕реА рднреА рдЖрдВрджреЛрд▓рди рдХреЗ рд╕рд╛рде рдпрд╛ рдмреИрдВрдХ рд╕реЗ, рдпрд╣ рдХрд╛рд░реНрд░рд╡рд╛рдИ рджрд░реНрдЬ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рд╕рд╛рде рд╣реА рд╕рд░рдХрд╛рд░ рдореЗрдВ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдкрд╣рд▓рд╛ рдХрджрдо рд╣реИ, рдФрд░ рднреА рдмрд╣реБрдд рдХреБрдЫ рд╣реЛрдЧрд╛ред
рдкрд░рд┐рджреГрд╢реНрдп b
рдЖрдкрдХрд╛ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░реАрдХреНрд╖рдХ рдЯреАрдо рдХреЛ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рднреА рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рд╣реБрдП, рдФрд░ рдЖрд╡реЗрджрди рд▓реЛрдб рдкрд░реАрдХреНрд╖рдг рдкрд░ рдЯреВрдЯ рдЧрдпрд╛ред рдПрдХ рдЧреИрд░-рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдХрд╣рддреА рд╣реИ рдХрд┐ 500 тАЛтАЛрдПрдордПрд╕ рд╕реЗ рдЕрдзрд┐рдХ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдкрд░ рдХрд┐рд╕реА рднреА рдкреЗрдЬ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рджрд░реНрдЬрдиреЛрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреНрд╡реЗрд╢реНрдЪрди рдорд┐рд▓реЗ, рдЬреЛ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдХреИрд╢рд┐рдВрдЧ рд╕реЗ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдкрд░рд┐рджреГрд╢реНрдп рдмреА
рдЖрдк 200+ рдХрдХреНрд╖рд╛рдУрдВ рд╡рд╛рд▓реЗ рдПрдХ рдЖрджрд░реНрд╢ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рджреЛ рд╕рд╛рд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЛрдореЗрди рдореЙрдбрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдмрд╛рдж рдореЗрдВ рдЖрдкрдХреЛ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдлреНрд░рдВрдЯ-рдПрдВрдб рд▓рд┐рдЦрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдпрд╣ рдЖрдкрдХреЗ рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ UI рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╕рднреА рд╡рд░реНрдЧ INotifyPropertyChanged рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВред
рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ AOP рдПрдХ рдореЛрдХреНрд╖ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпреЗ рд╕рднреА рдкрд░рд┐рджреГрд╢реНрдп рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рд╕рдорд╛рди рд╣реИрдВ:
рдХреНрд░реЙрд╕-рдХрдЯрд┐рдВрдЧ рдЪрд┐рдВрддрд╛
рдпрд╣ "рдХрднреА-рдХрднреА" рдХрдм рд╣реЛрддрд╛ рд╣реИ?
рдХреБрдЫ рд╡рд░реНрдЧреЛрдВ (рдмреИрдВрдХрд┐рдВрдЧ рдкреНрд░рдгрд╛рд▓реА, рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рд╕реЗрд╡рд╛рдУрдВ, рдбреЛрдореЗрди-рдореЙрдбрд▓) рдХреЛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, "рдЙрдирдХрд╛ рд╡реНрдпрд╡рд╕рд╛рдп" рдирд╣реАрдВ рд╣реИред
тАв рдмреИрдВрдХрд┐рдВрдЧ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рд╡реНрдпрд╡рд╕рд╛рдп рдзрди рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реИред рд▓реЙрдЧрд┐рдВрдЧ рдСрдкрд░реЗрд╢рди рд╕рд░рдХрд╛рд░ рдЪрд╛рд╣рддреА рд╣реИред
тАв рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рд╕реЗрд╡рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдбреЗрдЯрд╛ рдХреИрд╢рд┐рдВрдЧ рдПрдХ рдЧреИрд░-рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
тАв рдбреЛрдореЗрди рдореЙрдбрд▓ рдХрдХреНрд╖рд╛рдПрдВ рдЖрдкрдХреА рдХрдВрдкрдиреА рдХреЗ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИрдВред рд╕рдВрдкрддреНрддрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпреВрдЖрдИ рдХреА рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЗрд╡рд▓ рдпреВрдЖрдИ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рдо рдЙрди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рдЙрди рд╡рд░реНрдЧреЛрдВ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдЗрди рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдирд┐рд╣рд┐рдд рдирд╣реАрдВ рд╣реИрдВред AOP рдХреА рдмреЛрд▓реА рдореЗрдВ рдмреЛрд▓рддреЗ рд╣реБрдП - рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд▓рд╛рдЧреВ рдХреА рдЬрд╛ рд░рд╣реА рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕рдордЭрдирд╛ AOP рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдХреЛрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИрдВ - AOP рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?
рдЖрдЗрдП рдкрд░рд┐рджреГрд╢реНрдп рдмреА рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред
рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдореЗрдВ рдФрд╕рддрди 5 рдЧреБрдгред 200+ рдХрдХреНрд╖рд╛рдПрдВ рд╣реЛрдиреЗ рдкрд░, рдЖрдкрдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЗ 1000 рд╕реЗ рдЕрдзрд┐рдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдХреЙрдкреА-рдкреЗрд╕реНрдЯ):
public class Customer { public string Name { get; set; } }
рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ:
public class Customer : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private string _Name; public string Name { get { return _Name; } set { if (value != _Name) { _Name = value; SignalPropertyChanged("Name"); } } } void SignalPropertyChanged(string propertyName) { var pcEvent = this.PropertyChanged; if (pcEvent != null) pcEvent(this, new PropertyChangedEventArgs(propertyName)); } }
рд╡рд╛рд╣! рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╣реИ! рд╡реИрд╕реЗ, рдХреНрдпрд╛ рдЖрдк рдЖрдЬ рддрдХ рд╣реИрдВ? рдХреБрдЫ рджрд┐рдиреЛрдВ рдкрд╣рд▓реЗ рдЗрдВрдЯрд░реНрди рдиреЗ рдиреМрдХрд░реА рдЫреЛрдбрд╝ рджреА
рд╣рдореЗрдВ "рддрд░реАрдХреЛрдВ (рдпрд╛ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ) рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЗ рдмрд┐рдирд╛ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрдЯреЗрдб рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред" рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ: рдкреНрд░рдХрд╛рд░ рдХреЗ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдбреЛрдореЗрди рдореЙрдбрд▓ рдХреЗ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдП рдмрд┐рдирд╛ рдпрд╛ рдиреНрдпреВрдирддрдо рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рде INotifyPropertyChanged рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВред
рдпрджрд┐ рд╣рдо рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:
тАв рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕реНрдкрд╖реНрдЯ рдкреГрдердХреНрдХрд░рдг
тАв рдХреЛрдб рджреЛрд╣рд░рд╛рд╡ рд╕реЗ рдмрдЪреЗрдВ рдФрд░ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдЧрддрд┐ рджреЗрдВ
тАв рдЪрд▓реЛ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рдХреЗ рдЯрди рдХреЗ рддрд╣рдд рдбреЛрдореЗрди рдХрдХреНрд╖рд╛рдПрдВ рдирд╣реАрдВ рдЫрд┐рдкрд╛рддреЗ рд╣реИрдВ
рд╡рд╛рд╣ред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдХрд░реЗрдВ?
рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдЙрддреНрддрд░
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╣реИ рдЬрд┐рд╕реЗ рдХрдИ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рд▓рдХреНрд╖реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рдХреЛрдб рдЬреЛ рд▓реЙрдЧрд┐рдВрдЧ, рдХреИрд╢рд┐рдВрдЧ, рдпрд╛ рдХреБрдЫ рдФрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ) рдХреЛ рдПрдУрдкреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдПрдореНрдмреЗрдб рдХрд░реЗрдВ, рдПрдореНрдмреЗрдб рдХрд░реЗрдВ, рдЕрдкрдиреЗ рд╢рдмреНрдж рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ) рдХрд╛рд░реНрд░рд╡рд╛рдИ (рдореИрдВ рджреЛрд╣рд░рд╛рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ: рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд┐рд╕реА рднреА рд╕реНрдерд╛рди рдкрд░ рд▓рд╛рдЧреВ рдХреА рдЧрдИ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ) рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рд╣реИред рдФрд░ рд╣рдореЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖реНрдп рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЛ рдЪреБрдирдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
тАв рд╕реНрдЯреЗрдЯрд┐рдХ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░
тАв рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░
тАв рд╕реНрдереИрддрд┐рдХ рдЧреБрдгреЛрдВ рдХреЛ рдкрдврд╝реЗрдВ рдФрд░ рд▓рд┐рдЦреЗрдВ
тАв рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдЧреБрдг
тАв рд╕реНрдереИрддрд┐рдХ рддрд░реАрдХреЗ
тАв рдЙрджрд╛рд╣рд░рдг рдХреЗ рддрд░реАрдХреЗ
тАв рд╡рд┐рдзреНрд╡рдВрд╕рдХ
рдПрдХ рдЖрджрд░реНрд╢ рдПрдУрдкреА рдореЗрдВ, рд╣рдореЗрдВ рд▓рдХреНрд╖реНрдп рдХреЛрдб рдХреА рдХрд┐рд╕реА рднреА рдкрдВрдХреНрддрд┐ рдкрд░ рдПрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдорд╣рд╛рди, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдореЗрдВ рдПрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рд╣рдореЗрдВ рд▓рдХреНрд╖реНрдп рдореЗрдВ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рд╣рд╛рдБ, рд╕реАрдИрдкреА!
рдПрдУрдкреА рдореЗрдВ, рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдХрд╛ рд╡рд░реНрдгрди (рдЬрд┐рд╕ рд╕реНрдерд╛рди рдкрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЬрд╛рдПрдЧреА) рдХрд╛ рдПрдХ рдирд╛рдо рд╣реИ: рдкреЙрдЗрдВрдЯрдХрдЯред рдФрд░ рд╡рд╣ рд╕реНрдерд╛рди рдЬрд╣рд╛рдВ рдХреЛрдб рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╛рдВрдзрддрд╛ рд╣реИ: рдХрдиреЗрдХреНрд╢рди рдмрд┐рдВрджреБред
рдХрд┐ рд╕реНрдкрд╖реНрдЯ рд╣реИ? рд╢рд╛рдпрдж рдирд╣реАрдВ ... рдпрд╣рд╛рдБ рдЫрджреНрдо рдХреЛрдб рдХрд╛ рдПрдХ рд╕рд╛ рд╣реИ, рдЬреЛ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛:
рдХреНрдпрд╛ рдмреЙрдХреНрд╕ рдХреЗ рдмрд╛рд╣рд░ # рд╕рд╣реА рдореЗрдВ рдРрд╕рд╛ рддрдВрддреНрд░ рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ ???
рдХреБрдЫ рдФрд░ рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдБ
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВ, рдпрд╣рд╛рдБ рдХреБрдЫ рдФрд░ рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдБ рд╣реИрдВ ...
рдкрд╣рд▓реВ рдХреНрдпрд╛ рд╣реИ?
рдпрд╣ рдХрд╛рд░реНрд░рд╡рд╛рдИ, рдЯреБрдХрдбрд╝рд╛ рдФрд░ рдХрдиреЗрдХреНрд╢рди рдмрд┐рдВрджреБ рдХрд╛ рдПрдХ рд╕рдВрдпреЛрдЬрди рд╣реИред
рдПрдХ рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЛ, рдФрд░, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ, рд╕рдм рдХреБрдЫ рдЬрдЧрд╣ рдореЗрдВ рдЧрд┐рд░ рдЬрд╛рдПрдЧрд╛: рдПрдХ рд▓реЙрдЧрд┐рдВрдЧ рддрдВрддреНрд░ (рдХреНрд░рд┐рдпрд╛) рд╣реИ рдЬреЛ рдореЗрд░реЗ рдЖрд╡реЗрджрди рдХреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реНрдерд╛рди (рд╕реНрд▓рд╛рдЗрд╕) рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди (рдХрдиреЗрдХреНрд╢рди рдмрд┐рдВрджреБ) рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд▓реЙрдЧрд┐рдВрдЧ рд╡рд┐рдзрд┐ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕рдм рдПрдХ рд╕рд╛рде рдореЗрд░реЗ рдЖрд╡реЗрджрди рдХрд╛ рдПрдХ рдкрд╣рд▓реВ рд╣реИред
рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рдПрдХ рдорд┐рдирдЯ ... рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рдж рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?
рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рджреЛ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯред
рдПрдХ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдПрдХ рдРрд╕реА рдХреНрд░рд┐рдпрд╛ рд╣реИ рдЬреЛ рд╕реНрд▓рд╛рдЗрд╕ рдореЗрдВ рдХреЛрдб рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред рдПрдХ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ, рдпрд╣ рдмрд╕ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдХрдорд╛рдВрдб рдЬреЛрдбрд╝рддрд╛ рд╣реИред
рд▓реЙрдЧрд┐рдВрдЧ рдПрдХреНрд╢рди рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдЬрдм рд╡рд╛рддрд╛рд╡рд░рдг рд▓рдХреНрд╖реНрдп рд╡рд┐рдзрд┐ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмреИрдВрдХред рдирд┐рдХрд╛рд╕реА (рдЗрдВрдЯ рдЕрдорд╛рдЙрдВрдЯ)) рдХреЛ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рд▓реЙрдЧрд┐рдВрдЧрдХреЙрдиреНрдХреЗрд░.рд▓реЙрдЧрд╡рд┐рдереНрд░реЙ (рдЗрдВрдЯ рдЕрдорд╛рдЙрдВрдЯ) рд╡рд┐рдзрд┐ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдмреИрдВрдХ.рдбреНрд░реЛрдХ (рдЗрдВрдЯ рдЕрдорд╛рдЙрдВрдЯ) рд╡рд┐рдзрд┐ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреА рд░рд╣рддреА рд╣реИред
рдпреБрдХреНрддрд┐рдпрд╛рдБред
рдЯрд┐рдкреНрд╕ - рдРрд╕реА рдХреНрд░рд┐рдпрд╛рдПрдВ рдЬреЛ рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рдХреЗ рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдмрджрд▓ рд╕рдХрддреА рд╣реИрдВред
рдПрдХреНрд╢рди рдХреИрд╢рд┐рдВрдЧ рдПрдХ рдмреЗрд╣рддрд░реАрди рдЙрджрд╛рд╣рд░рдг рд╣реИред рдЬрдм рд▓рдХреНрд╖реНрдп рд╡рд┐рдзрд┐ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, CustomerService.GetById (int Id)), CachingConcern.TryGetCustomerById (int Id) рд╡рд┐рдзрд┐ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдХреИрд╢ рдореЗрдВ рдкрд╛рдП рдЧрдП рдорд╛рди рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддреА рд╣реИ, рдпрд╛ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реЛрдиреЗ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрди рдЬрд╛рд░реА рд░рдЦрддреА рд╣реИред
рд╕реБрдЭрд╛рд╡ рд╣реИрдВ:
тАв рд▓рдХреНрд╖реНрдп рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЙрдиреНрд╣реЗрдВ рдмрджрд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛
тАв рд▓рдХреНрд╖реНрдп рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд░рджреНрдж рдХрд░реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ
тАв рд▓рдХреНрд╖реНрдп рд╡рд┐рдзрд┐ рдХреЗ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдмрджрд▓реЗрдВ рдпрд╛ рдмрджрд▓реЗрдВ
рдХреНрдпрд╛ рдЖрдк рдЕрднреА рднреА рдкрдврд╝ рд░рд╣реЗ рд╣реИрдВ? рдмреНрд░рд╛рд╡реЛ! рдкрд╛рд░реНрд╕ рдХреНрдпреВ рд╡реВрд╕ рд▓реЗ рд╡рд▓реЗрдЬрд╝ рдмрд┐рдПрди ...
рдпрд╣ AOP рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдФрд░ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред рдЪрд▓реЛ рдЙрд╕реЗ C # рдореЗрдВ рдмреЗрд╣рддрд░ рдЬрд╛рдирддреЗ рд╣реИрдВред
рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдореБрдЭреЗ рдХреЛрдб рдпреВ рдЬреЗрдИ рд▓реЗ рд▓реЗ рдЪрд┐рдПрди рджрд┐рдЦрд╛рдУ!
рдХреНрд░рд┐рдпрд╛ (рдЪрд┐рдВрддрд╛)
рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдЗрд╕ рдЬрд╛рджреВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рдХреНрд╖реНрдп рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИред
рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ!
public interface IConcern<T> { T This { get; }
рд╕реНрд▓рд╛рдЗрд╕ (рдкреЙрдЗрдВрдЯрдХрдЯ)
рдХреЛрдб рдХреА рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рд╕реНрд▓рд╛рдЗрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ-рдПрдХ рдХрд░рдХреЗ рд╣рдо рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ System.Reflection.MethodBase рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред MSDN рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рд╣реИ: рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рдмреАрдЪ, рд╕реНрд▓рд╛рдЗрд╕рд┐рдВрдЧ рд▓рд┐рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдердбрдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХрд╛ рд╕рдмрд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рд╣реИред
рдЖрдк рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реЛрдВ, рд╡рд┐рдзрд┐рдпреЛрдВ, рдЧреБрдгреЛрдВ рдФрд░ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд╕реНрд▓рд╛рдЗрд╕рд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд▓рдЧрднрдЧ рд╕рднреА рдЪреАрдЬреЗрдВ рдЬреЛ рдЖрдк .Net рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЕрдВрддрддрдГ рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддреА рд╣реИрдВ ...
рдЕрдкрдиреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ:
public class Customer { public event EventHandler<EventArgs> NameChanged; public string Name { get; private set; } public void ChangeName(string newName) { Name = newName; NameChanged(this, EventArgs.Empty); } } class Program { static void Main(string[] args) { var t = typeof(Customer);
рдХрдиреЗрдХреНрд╢рди рдЕрдВрдХ (joinpoint)
рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд░рд▓ рд╣реИред рдЗрд╕ рдХреЛрдб рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:
void Join(System.Reflection.MethodBase pointcutMethod, System.Reflection.MethodBase concernMethod);
рд╣рдо рдЗрд╕реЗ рдПрдХ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреА рддрд░рд╣ рдХреБрдЫ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдо рдмрд╛рдж рдореЗрдВ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ !!!
public class Customer { public string Name { get; set;} public void DoYourOwnBusiness() { System.Diagnostics.Trace.WriteLine(Name + " "); } } public class LoggingConcern : IConcern<Customer> { public Customer This { get; set; } public void DoSomething() { System.Diagnostics.Trace.WriteLine(This.Name + " "); This.DoYourOwnBusiness(); System.Diagnostics.Trace.WriteLine(This.Name + " "); } } class Program { static void Main(string[] args)h {
рдХреНрдпрд╛ рд╣рдо рдЕрдкрдиреЗ рдЫрджреНрдо рдХреЛрдб рд╕реЗ рджреВрд░ рд╣реИрдВ? рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ ...
рддреЛ рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ?
рдпрд╣ рд╕рдм рдПрдХ рд╕рд╛рде рд░рдЦрдХрд░ ...
рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рд╕рдорд╕реНрдпрд╛рдУрдВ рдФрд░ рдордЬрд╝рд╛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ!
рд▓реЗрдХрд┐рди рдЪрд▓реЛ рдПрдХ рд╕рд░рд▓ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ
рд░рдЬрд┐рд╕реНрдЯреНрд░реА
рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╣рдорд╛рд░реЗ рдХрдиреЗрдХреНрд╢рди рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рд░рд┐рдХреЙрд░реНрдб рд░рдЦреЗрдЧреАред рдХрдиреЗрдХреНрд╢рди рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЧрд▓рдЯрди рд╕реВрдЪреА рд▓реЗрдВред рдЬрдВрдХреНрд╢рди рдмрд┐рдВрджреБ рдПрдХ рд╕рд░рд▓ рд╕рдВрд░рдЪрдирд╛ рд╣реИ:
public struct Joinpoint { internal MethodBase PointcutMethod; internal MethodBase ConcernMethod; private Joinpoint(MethodBase pointcutMethod, MethodBase concernMethod) { PointcutMethod = pointcutMethod; ConcernMethod = concernMethod; }
рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВ ... рдЙрд╕реЗ IEquatable рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдб рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ред
рдФрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реАред рдХреНрд▓рд╛рд╕ рдХреЛ AOP рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рд╣реИред рдпрд╣ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдирд╛рдордХ рд╕реНрдерд┐рд░ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдиреЗ рдЕрджреНрд╡рд┐рддреАрдп рдЙрджрд╛рд╣рд░рдг рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
public class AOP : List<Joinpoint> { static readonly AOP _registry; static AOP() { _registry = new AOP(); } private AOP() { } public static AOP Registry { get { return _registry; } } [MethodImpl(MethodImplOptions.Synchronized)] public void Join(MethodBase pointcutMethod, MethodBase concernMethod) { var joinPoint = Joinpoint.Create(pointcutMethod, concernMethod); if (!this.Contains(joinPoint)) this.Add(joinPoint); } }
рдПрдУрдкреА рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рдЗрд╕ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
AOP.Registry.Join(pointcut, concernMethod);
рд╣реНрдпреВрд╕реНрдЯрди, рд╣рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ
рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдФрд░ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдореЗрдВ рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдЧрд░ рдбреЗрд╡рд▓рдкрд░ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрддрд╛ рд╣реИ
var customer = new Customer {Name="test"}; customer.DoYourOwnBusiness();
рдлрд┐рд░ рд╣рдорд╛рд░реА рд░рдЬрд┐рд╕реНрдЯреНрд░реА рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╣рдорд╛рд░рд╛ LoggingConcern.DoSomething () рд╡рд┐рдзрд┐ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛрдЧреАред
рдкрд░реЗрд╢рд╛рдиреА рдпрд╣ рд╣реИ рдХрд┐ .рдиреЗрдЯ рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЙрд▓ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдЪреВрдВрдХрд┐ рдХреЛрдИ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рддрдВрддреНрд░ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдкрдХреЗ рддрдВрддреНрд░ рдХреА рдХреНрд╖рдорддрд╛рдПрдВ рдЖрдкрдХреЗ AOP рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреАред
рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕рднреА рд╕рдВрднрд╡ рдЕрд╡рд░реЛрдзрди рддрдХрдиреАрдХреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред рдмрд╕ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЕрд╡рд░реЛрдзрди рд╡рд┐рдзрд┐ AOP рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмреАрдЪ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рд╣реИред
SharpCrafters рд╡реЗрдмрд╕рд╛рдЗрдЯ (PostSharp рд╕реНрд╡рд╛рдорд┐рдпреЛрдВ) рджреЛ рдореБрдЦреНрдп рддрдХрдиреАрдХреЛрдВ рдкрд░ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ:
тАв рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдПрдореНрдмреЗрдб рдХрд░рдирд╛
тАв рд░рдирдЯрд╛рдЗрдо рдкрд░ рдПрдореНрдмреЗрдб рдХрд░рдирд╛
рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди - рдкреНрд░реЙрдХреНрд╕реА
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рдХреЛрдИ рд░рд╣рд╕реНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрд╡рд░реЛрдзрди рдХреЗ рддреАрди рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:
тАв .рдиреЗрдЯ рдЕрд╕реЗрдВрдмрд▓рд┐рдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рднрд╛рд╖рд╛ рдФрд░ рд╕рдВрдХрд▓рдХ рдмрдирд╛рдПрдВ: рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╕рдордп, рдЖрдк рдХрд╣реАрдВ рднреА рдХреБрдЫ рднреА рдПрдореНрдмреЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
тАв рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдЬреЛ рд░рдирдЯрд╛рдЗрдо рдкрд░ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рддрд╛ рд╣реИред
тАв рдЧреНрд░рд╛рд╣рдХ рдФрд░ рд▓рдХреНрд╖реНрдп рдХреЗ рдмреАрдЪ рдкреБрдЯ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдХреЙрд▓ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рддрд╛ рд╣реИред
рдЙрдиреНрдирдд рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреЛрдЯ: рдореИрдВ рдЬрд╛рдирдмреВрдЭрдХрд░ рдбрд┐рдмрдЧрд░ рдФрд░ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдПрдкреАрдЖрдИ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рдирд╣реАрдВ рд╣реИред
рд╕рдмрд╕реЗ рдЙрдиреНрдирдд рдХреЗ рд▓рд┐рдП рдПрдХ рдиреЛрдЯ: рд░рд╕рд▓рд┐рди рдПрдкреАрдЖрдИ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рдВрдХрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдпрд╣ рдЕрднреА рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдПрдХ рдмреЙрди рдПрдВрдЯреЗрдиреНрдбреНрдпреВрд░ ...
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрдкрдХреЛ рдХреЛрдб рдХреА рдХрд┐рд╕реА рднреА рдкрдВрдХреНрддрд┐ рдореЗрдВ рдХрдЯреМрддреА рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдкрд╣рд▓реЗ рджреЛ рд╡рд┐рдХрд▓реНрдк рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИрдВред
рддреАрд╕рд░реЗ рд╡рд┐рдХрд▓реНрдк рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреЛ рдЦрдмрд░реЗрдВ рд╣реИрдВ: рдЕрдЪреНрдЫрд╛ рдФрд░ рдмреБрд░рд╛ред
рдЦрд░рд╛рдм - рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди, рдЖрдкрдХреЛ рдЧреИрд╕рдХреЗрдЯ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд▓рдХреНрд╖реНрдп рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЯрд╛рд░рдЧреЗрдЯ рдХреНрд▓рд╛рд╕реЗрд╕ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдлреИрдХреНрдЯреНрд░реА рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рд▓рдХреНрд╖реНрдп рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдореМрдЬреВрдж рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкреНрд░рдмрдВрдзрди рдФрд░
рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ
рд╡реНрдпреБрддреНрдХреНрд░рдо рдХреЗ рд╕реНрд╡рд╛рдореА рдХреЗ рд▓рд┐рдП - рдпрд╣ рдПрдХ рдХрд╛рд░реНрдп рднреА рдирд╣реАрдВ рд╣реИред рдмрд╛рдХреА рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╣рдорд╛рд░реЗ рдЕрд╡рд░реЛрдзрди рддрдХрдиреАрдХ рдореЗрдВ рд╕рднреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░рдЦрд╛рдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЪрд┐рдВрддрд╛ рдордд рдХрд░реЛ, рд╣рдо рдЗрд╕ рдХрд╛рд░рдЦрд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВрдЧреЗред
рдЕрдЪреНрдЫреА рдЦрдмрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдкреНрд░реЙрдХреНрд╕реА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред System.Runtime.Remoting.Proxies.RealProxy рд╡рд░реНрдЧ рдЗрд╕реЗ рдПрдХ рдЗрд╖реНрдЯрддрдо рддрд░реАрдХреЗ рд╕реЗ рдмрдирд╛рдПрдЧрд╛ред
рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо рдЙрд╕рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рдирд╣реАрдВ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдпрд╣ рд╡рд░реНрдЧ рдПрдХ рдЫрджреНрдо рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рд╣реИред рдлрд┐рд░ рднреА, рд╡рд╣ рд╣рдореЗрдВ рдЕрдкрдиреЗ GetTransparentProxy () рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рдмрдирд╛ рджреЗрдЧрд╛, рдФрд░ рдпрд╣ рд╡рд╣ рд╣реИ, рдЬрд┐рд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдореЗрдВ рдЙрд╕рд╕реЗ рдЬрд╝рд░реВрд░рдд рд╣реИред
рдпрд╣рд╛рдБ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдордЫрд▓реА рд╣реИ:
public class Interceptor : RealProxy, IRemotingTypeInfo { object theTarget { get; set; } public Interceptor(object target) : base(typeof(MarshalByRefObject)) { theTarget = target; } public override System.Runtime.Remoting.Messaging.IMessage Invoke(System.Runtime.Remoting.Messaging.IMessage msg) { IMethodCallMessage methodMessage = (IMethodCallMessage) msg; MethodBase method = methodMessage.MethodBase; object[] arguments = methodMessage.Args; object returnValue = null;
рдХреБрдЫ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг, рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдо рдЕрд╣рд╕рд╛рд╕ рдХреЗ рджрд┐рд▓ рдореЗрдВ рдЪрдврд╝ рдЧрдП ...
RealProxy рд╡рд░реНрдЧ рдХреЛ рджреВрд░рд╕реНрде рд╡рд╕реНрддреБрдУрдВ рд╕реЗ рдХреЙрд▓ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рдиреЗ рдФрд░ рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд░рд┐рдореЛрдЯ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░рд┐рдореЛрдЯ рд╕рдордЭрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: рдХрд┐рд╕реА рдЕрдиреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдХрд┐рд╕реА рдЕрдиреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЛрдореЗрди, рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рд░реНрд╡рд░, рдЖрджрд┐ рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ)ред рд╡рд┐рд╡рд░рдг рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рдмрд┐рдирд╛, .Net рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдореЗрдВ рджреВрд░рд╕реНрде рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ: рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдФрд░ рдореВрд▓реНрдп рд╕реЗред рдЗрд╕рд▓рд┐рдП, рдЖрдк рд╣рдЯрд╛рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреЗрд╡рд▓ рддрднреА рдСрд░реНрдбрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рд╡реЗ рдорд╛рд░реНрд╢рд▓рд╣рд╛рдЗрд░реАрдл рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдпрд╛ ISerializable рд▓рд╛рдЧреВ рдХрд░реЗрдВред рд╣рдо рджреВрд░рд╕реНрде рд╡рд╕реНрддреБрдУрдВ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рд╣рдореЗрдВ рдпрд╣ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП RealProxy рд╡рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд▓рдХреНрд╖реНрдп рдирд┐рдпрдВрддреНрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рд╣рдо RealProxy рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдЯрд╛рдЗрдкреЛрдл (рдорд╛рд░реНрд╢рд▓реАрдмрд┐рдпрд░) рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
RealProxy, рдЗрдирд╡реЛрдХ рд╡рд┐рдзрд┐ (System.Runtime.Remoting.Messaging.IMessage msg) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рд░рджрд░реНрд╢реА рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рднреА рдХреЙрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдпрд╣рд╛рдВ рд╣реИ рдХрд┐ рд╣рдо рддрд░реАрдХреЛрдВ рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд╕рд╛рд░ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреЗрдВред
IRemotingTypeInfo рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреВрд░рд╕реНрде рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ, рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд░реНрд╡рд░ рд╕реЗ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдЧрд╛ред рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдкрддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдЬрдм рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ GetTransparentProxy () рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рд░рд┐рдЯрд░реНрди рдСрдмреНрдЬреЗрдХреНрдЯ (рдкрд╛рд░рджрд░реНрд╢реА рдкреНрд░реЙрдХреНрд╕реА) рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдиреБрдмрдВрдз рдХрд╛ рдЕрдиреБрдкрд╛рд▓рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред IRemotingTypeInfo рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рд╣рдо рдХреНрд▓рд╛рдЗрдВрдЯ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕рд╛ рд╡реИрдз рд╣реИ рдФрд░ рдХреМрди рд╕рд╛ рдирд╣реАрдВред
рдЕрдм рд╣рдо рдпрд╣рд╛рдБ рдЬрд┐рд╕ рдЯреНрд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕ рдкрд░ рдЖрд╢реНрдЪрд░реНрдп рдХрд░реЗрдВ
public bool CanCastTo(Type fromType, object o) { return true; }
рдПрдУрдкреА рдХрд╛ рд╣рдорд╛рд░рд╛ рд╕рдВрдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рджреВрд░рд╕реНрде рд╡рд╕реНрддреБ рдкрд░ рдЗрди рджреЛ рд╢рдмреНрджреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рдХрд╛рд░рдг рд╕рдВрднрд╡ рд╣реИ: рдпрд╣ рд╕рдЪ рд╣реИред рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдо GetTransparentProxy () рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ
рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкрд░реНрдпрд╛рд╡рд░рдг рдЬрд╛рдВрдЪ рдХреЗ рдХрд┐рд╕реА рднреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ
!!!!рдмреБрдзрд╡рд╛рд░ рдмрд╕ рд╣рдореЗрдВ рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реИ!
рдЖрдк рдЗрд╕ рдХреЛрдб рдХреЛ рд╕рд╣реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╕реЗ рдЕрдзрд┐рдХ рдЙрдЪрд┐рдд рд░рд┐рдЯрд░реНрди рджреЗ рд╕рдХрддреЗ рд╣реИрдВ ... рд▓реЗрдХрд┐рди рдЖрдк рдпрд╣ рднреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐
рдЧреИрд░-рдореМрдЬреВрдж рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд▓рд╛рдн рдХреИрд╕реЗ рдЙрдард╛рдПрдВ рдпрд╛ рдкреВрд░реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░реЗрдВ ... рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХрд▓реНрдкрдирд╛ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЬрдЧрд╣ рд╣реИ ...
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдорд╛рд░реЗ рд▓рдХреНрд╖реНрдп рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рднреНрдп рдЕрд╡рд░реЛрдзрди рддрдВрддреНрд░ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЕрд╡рд░реЛрдзрди рдФрд░ рдкрд╛рд░рджрд░реНрд╢реА рдкрд░рджреЗ рдирд╣реАрдВ рд╣реИрдВред рдпреЗ рд╣реИ рдлреИрдХреНрдЯреНрд░реА рдХреЗ рд▓рд┐рдП рдЪреБрдиреМрддреА ...
рдХрд╛рд░рдЦрд╛рдирд╛ рд╣реИ
рдЬреНрдпрд╛рджрд╛ рдХреБрдЫ рдирд╣реАрдВ рдХрд╣рдирд╛ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рдХреНрд▓рд╛рд╕ рдлрд┐рд╢ рд╣реИред
public static class Factory { public static object Create<T>(params object[] constructorArgs) { T target;
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдлрд╝реИрдХреНрдЯрд░реА рдХреНрд▓рд╛рд╕ рд╣рдореЗрд╢рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рд╣рдо рдЯрд╛рдЗрдк T рдХреА рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рдкрд╛рд░рджрд░реНрд╢реА рдкреНрд░реЙрдХреНрд╕реА рдЯрд╛рдЗрдк T рдХреА рдирд╣реАрдВ рд╣реИ, рдпрд╣ System.Runtime.Remoting.Proxies .__ TransparentProxy рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИред рд▓реЗрдХрд┐рди рдкрд░реНрдпрд╛рд╡рд░рдг рджреНрд╡рд╛рд░рд╛ рд╣рдореЗрдВ рджрд┐рдП рдЧрдП рд╕рдВрдХрд▓реНрдк рдХреЛ рдпрд╛рдж рд░рдЦреЗрдВ,
рд╣рдо рдмрд┐рдирд╛ рдЬрд╛рдВрдЪреЗ рдкрд░рдЦреЗ рдХрд┐рд╕реА рднреА рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рд▓реМрдЯреА рд╣реБрдИ рд╡рд╕реНрддреБ рдХреЛ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ!рд╣рдордиреЗ рдЕрдкрдиреЗ рдПрдУрдкреА рд╡рд░реНрдЧ рдореЗрдВ рдлреИрдХреНрдЯрд░реА рд╡рд░реНрдЧ рдХреЛ рдЗрд╕ рдЙрдореНрдореАрдж рдХреЗ рд╕рд╛рде рд░рдЦрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рдл-рд╕реБрдерд░рд╛ рдХреЛрдб рджреЗрдВрдЧреЗред рдЗрд╕реЗ рдЙрдкрдпреЛрдЧ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдирд╡реАрдирддрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдиреЛрдЯ
рдпрджрд┐ рдЖрдк рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рдирд╛рдпрдХ рд╣реИрдВ! Bravissimo! рдХреБрдбреЛрд╕!
рд▓реЗрдЦ рдХреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП (рдФрд░ рдХреНрдпрд╛ рдЗрддрдирд╛ рдордЬрд╝реЗрджрд╛рд░ рд╣реИ?), рдореИрдВ рддрд░реАрдХреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрдмрд╛рдК рдЪрд░реНрдЪрд╛рдУрдВ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛ред рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЕрднреА рднреА рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ: рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ - рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ! рд╡рд░реНрдЧреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдирд╛рдо рдереЛрдбрд╝рд╛ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рд╢рд╛рд╕рди рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред
рдЪреЗрддрд╛рд╡рдиреА! рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдкреИрдиреЗрд▓реНрдЯрд┐рдорд╕ рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рдкрдврд╝реЗрдВред рдФрд░ рдЕрдЧрд░ рдЖрдкрдХреЛ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдкреИрдиреЗрд▓реНрдЯрд┐рдорд╕ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ, рддреЛ рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред
рдХреЗ рдЙрдкрдпреЛрдЧ
рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рд╕рд╛рд░реА рдЪреАрдЬреЗрдВ рд▓рд┐рдЦреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдпрд╣ рдирд╣реАрдВ рджрд┐рдЦрд╛рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдм рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред рдФрд░ рдпрд╣рд╛рдБ рд╡рд╣ рд╕рддреНрдп рдХрд╛ рдХреНрд╖рдг рд╣реИ!
рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд╣рд▓реБрдУрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ 5 рдЙрджрд╛рд╣рд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
тАв рдбрд┐рдЬрд╛рдЗрдирд░ рдХрд╛ рдЕрд╡рд░реЛрдзрди
тАв рддрд░реАрдХреЛрдВ рдФрд░ рдЧреБрдгреЛрдВ рдХрд╛ рдЕрд╡рд░реЛрдзрди
тАв рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдЕрд╡рд░реЛрдзрди
тАв рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЗрдВрдЯрд░рд╕реЗрдкреНрд╢рди рдЯрд╛рдЗрдк рдХрд░реЗрдВ
тАв рдЕрд╡рд░реЛрдзрди рдлрд╝рд╛рдЗрд▓ред ReadAllText (рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрде)
рдФрд░ рдпрд╣рд╛рдБ рдореИрдВ рдкрд╛рдБрдЪ рдореЗрдВ рд╕реЗ рджреЛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░реВрдБрдЧрд╛: рд╕рдмрд╕реЗ рдХрдо рдФрд░ рд╕реНрдкрд╖реНрдЯред
рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдЧреБрдгреЛрдВ рдХрд╛ рдЕрд╡рд░реЛрдзрди
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдПрдХ рдбреЛрдореЗрди рдореЙрдбрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВред
public interface IActor { string Name { get; set; } void Act(); } public class Actor : IActor { public string Name { get; set; } public void Act() { Console.WriteLine("My name is '{0}'. I am such a good actor!", Name); } }
рдЕрдм рд╣рдореЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЬрд░реВрд░рдд рд╣реИ
public class TheConcern : IConcern<Actor> { public Actor This { get; set; } public string Name { set { This.Name = value + ". Hi, " + value + " you've been hacked"; } } public void Act() { This.Act(); Console.WriteLine("You think so...!"); } }
рдЬрдм рдЖрд╡реЗрджрди рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЛ рд╣рдорд╛рд░реЗ рдХрдиреЗрдХреНрд╢рди рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ
рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдо рдХрд╛рд░рдЦрд╛рдиреЗ рдореЗрдВ рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛рддреЗ рд╣реИрдВ
var actor1 = (IActor) AOP.Factory.Create<Actor>(); actor1.Name = "the Dude"; actor1.Act();
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдордиреЗ рдЕрднрд┐рдиреЗрддрд╛ рд╡рд░реНрдЧ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╣рдо рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо Ictor рдХреЛ рд▓реЗ рдЬрд╛рдПрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд░реНрдЧ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдпрд╣ рд╕рдм рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдпрд╣ рдорд┐рд▓рддрд╛ рд╣реИ:
My name is 'the Dude. Hi, the Dude you've been hacked'. I am such a good actor!
You think so...!
рдЕрд╡рд░реЛрдзрди рдлрд╝рд╛рдЗрд▓ред ReadAllText (рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрде)
рдпрд╣рд╛рдБ рджреЛ рдЫреЛрдЯреЗ рдореБрджреНрджреЗ рд╣реИрдВ:
тАв рдлрд╝рд╛рдЗрд▓ рд╡рд░реНрдЧ рд╕реНрдерд┐рд░ рд╣реИ
тАв рдФрд░ рдХрд┐рд╕реА рднреА рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
"рдЕрдЪреНрдЫрд╛" рдпрд╛рдж рд╣реИ? рдкрд░реНрдпрд╛рд╡рд░рдг рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рдкреНрд░рдХрд╛рд░ рдФрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдЬрд╛рдБрдЪ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рддреЛ рд╣рдо рдХреЛрдИ рднреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдХрд┐рд╕реА рдХреЛ рднреА рд▓рдХреНрд╖реНрдп рдпрд╛ рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдмреЛрдз рдирд╣реАрдВ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рдо рдПрдХ рдЕрдиреБрдмрдВрдз рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдЖрдЗрдП рдПрдХ рд╕реНрдЯреИрдЯрд┐рдХ рдХреНрд▓рд╛рд╕ рдлрд╛рдЗрд▓ рдмрдирдиреЗ рдХрд╛ рдирд╛рдЯрдХ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдПрдВред
public interface IFile { string[] ReadAllLines(string path); }
рд╣рдорд╛рд░реА рдХрд╛рд░реНрд░рд╡рд╛рдИ
public class TheConcern { public static string[] ReadAllLines(string path) { return File.ReadAllLines(path).Select(x => x + " hacked...").ToArray(); } }
рдкреНрд╡рд╛рдЗрдВрдЯ рд░рдЬрд┐рд╕реНрдЯреНрд░реЗрд╢рди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ
AOP.Registry.Join ( typeof(File).GetMethods().Where(x => x.Name == "ReadAllLines" && x.GetParameters().Count() == 1).First(), typeof(TheConcern).GetMethod("ReadAllLines") );
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди
var path = Path.Combine(Environment.CurrentDirectory, "Examples", "data.txt"); var file = (IFile) AOP.Factory.Create(typeof(File)); foreach (string s in file.ReadAllLines(path)) Console.WriteLine(s);
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо Factory.Create рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╕реНрдереИрддрд┐рдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рддрд░реНрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕рдВрджрд░реНрдн
рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдЖрджреЗрд╢ рдХреЗред
рдХреНрдпреВрдИ 4 рдЬреЗ рд╕реЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓тАв
рд╡рд┐рд╕реНрддрд╛рд░ RealProxyтАв
рдбрд╛рдпрдиреЗрдорд┐рдХ рдкреНрд░реЙрдХреНрд╕реА рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ (Castle.net)тАв
LinFu.DynamicProxy: рдПрдХ рд▓рд╛рдЗрдЯрд╡реЗрдЯ рдкреНрд░реЙрдХреНрд╕реА рдЬрдирд░реЗрдЯрд░тАв
рдбрд╛рдпрдиреЗрдорд┐рдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╣рд▓реБрдУрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВтАв
AOP рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП CLR рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛тАв
рдЕрд╡рд░реЛрдзрди .NetтАв
рдХреНрд▓реАрдирд░ рдореЗрдВрдЯреЗрдиреЗрдВрд╕ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд╕реНрдкреЗрдХреНрдЯ рдлреНрд▓реБрдПрдВрдЯ рд░рд╛рд╕реНрддрд╛рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ?
рд╣рдо рдПрдУрдкреА рдХреЗ рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗ: рдкрд╣рд▓реВ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред TinyAOP рдХрд╛ рдЬрдиреНрдо рд╣реБрдЖред рд▓реЗрдХрд┐рди рдПрдУрдкреА рдХреА рднреВрдорд┐ рдореЗрдВ рдЖрдкрдХрд╛ рд░рд╛рд╕реНрддрд╛ рдЕрднреА рдЦрддреНрдо рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рдФрд░ рдЖрдк рдЧрд╣рд░рд╛рдИ рддрдХ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдХрд╛рд░рдг 1: рдЬреЛ рд╣рдо рдЕрдм рдХрд░рддреЗ рд╣реИрдВ, рдЬрдВрдХреНрд╢рди рдмрд┐рдВрджреБрдУрдВ рдХреЛ рджрд░реНрдЬ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рдирд╣реАрдВ! рдереЛрдбрд╝рд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдПрдУрдкреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рдорд╛рди рд╣реИред рдЬреАрд╡рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП AOP рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╕рд┐рд░рджрд░реНрдж рдкреИрджрд╛ рдХрд░рдиреЗ рдХреА рдирд╣реАрдВред
рдХрд╛рд░рдг 2: рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ рдФрд░
рдПрдХрддреНрд░реАрдХрд░рдг рдХреЗ рд╡рд┐рд╖рдпреЛрдВ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЖрдк рдЙрдирд╕реЗ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХрд╛рд░рдг 3: рд╣рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рд╕реНрдерд┐рд░рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдм рдХреЛрдб рдХреЗрд╡рд▓ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдкреНрд░рдорд╛рдг рд╣реИред рдпрд╣ рдХрд╛рдлреА рдзреАрдорд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдмрд╣реБрдд рддреЗрдЬ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬрд╛рдБрдЪрдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╣реБрдИ рдпрд╛ рддреЛ рдЪреЛрдЯ рдирд╣реАрдВ рд▓рдЧреАредрдХрд╛рд░рдг 4: рд╣рдо рд▓рдЧрднрдЧ рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреЛ рд░реЛрдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд┐рдВрдЧ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?рдХрд╛рд░рдг 5: рдХреНрдпрд╛ рдЖрдкрдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рдмрд╣реБрдд рдХрдо рдХрд╛рд░рдг рд╣реИ?рдирд┐рд╖реНрдХрд░реНрд╖
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрдЪреНрдЫрд╛ рдФрд░ рдХреЙрдореНрдкреИрдХреНрдЯ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╣реИ рдЬреЛ рдПрдУрдкреА рдХреЛ рдПрдореНрдмреЗрдб рдХрд┐рдП рдмрд┐рдирд╛ рд╕рд╛рдл рдкреНрд░рдмрдВрдзрд┐рдд рдХреЛрдб рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рддрдХрдиреАрдХреА рд╡реНрдпрд╡рд╣рд╛рд░реНрдпрддрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЖрджрд┐редрдЕрдм рдЬрдм рдЖрдк AOP рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВредрдлрд┐рд░ рдПрдХ рдЕрдиреБрд╡рд╛рджрдХ рдХреЛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЧреИрдЧ рд▓реЗ рдЬрд╛рдиреЗ рд▓рдЧрддрд╛ рд╣реИ
рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореИрдВ рдЗрд╕ рдЦрдВрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦрдХ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕рд╣рдордд рд╣реВрдБредHabahabr.ru, codeproject.com рдФрд░ рдЬреИрд╕реА рд╕рд╛рдЗрдЯреЗрдВ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдореМрдЬреВрдж рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рднрд┐рдиреНрди рд▓реЛрдЧ рдЙрди рдкрд░ рд▓реЗрдЦ рдкреЛрд╕реНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рд╡реЗ рдРрд╕рд╛ рдХреНрдпреЛрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдХреГрдкрдпрд╛ рд▓реЗрдЦрдХреЛрдВ рдХреА рдЙрдкреЗрдХреНрд╖рд╛ рди рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк рд▓реЗрдЦ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИред рдпрджрд┐ рдЖрдк рд╕рд┐рд░реНрдл рдорд╛рдЗрдирд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреЛрдИ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдмреЗрд╣рддрд░ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╛ рддреЛ рдЪреБрдк рдордд рд░рд╣реЛ!рдФрд░ рдЕрдм рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЕрдиреБрд╡рд╛рджрдХ рдХрд╛ рдЕрдВрддрд░рд╛рд▓ рд╣реИ
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореЗрд░реЗ рдЖрд╢реНрдЪрд░реНрдп рд╡рд┐рд╡реЗрдХ рдХреЗ рд▓рд┐рдП рдХрдИ рд╢рдмреНрджреЛрдВ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╕реЗ AOP рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рдПрдХ рдЕрдЪреНрдЫрд╛ рдФрд░ рд╕рд░рд▓ рд░реВрд╕реА рд╢рдмреНрдж рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢рдмреНрджреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐:тАв рдкрд╣рд▓реВ (рд╡рд╣рд╛рдБ рд╕рдордЭрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рднреА)тАв рдЪрд┐рдВрддрд╛тАв JoinPointтАв рдкрд╛рд░ рдХрд╛рдЯрдиреЗтАв рдмреБрдирд╛рдИ ( рдЬреБрд▓рд╛рд╣рд╛ - рдХреБрдЫ рднреА рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдПрдХ рд░реВрд╕реА рд╢рдмреНрдж рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛)рд▓реЗрдЦрдХ: рдЧреБрдЗрд░реЗрдХ рд▓реЗ рдмрд╛рд░реНрд╕