рдЧрддрд┐рдорд╛рди рдкреНрд░рддрд┐рдмрд┐рдВрдм рдмрджреНрджрд▓ рдЕрдпрд╢рд╕реНрд╡реА рд▓реЗрдЦ

рдореА рд▓рдЧреЗрдЪ рд▓реЗрдЦрд╛рдЪреНрдпрд╛ рд╢реАрд░реНрд╖рдХрд╛рдЪреЗ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рджреЗрдИрди. рдореВрд│ рдпреЛрдЬрдирд╛ рдПрдХ рд╕рд╛рдзреЗ рдкрдг рд╡рд╛рд╕реНрддрд╡рд╡рд╛рджреА рдЙрджрд╛рд╣рд░рдг рд╡рд╛рдкрд░реВрди рдкрд░рд╛рд╡рд░реНрддрдирд╛рдЪрд╛ рд╡рд╛рдкрд░ рд╡рд╛рдврд╡рд┐рдгреНрдпрд╛рдмрд╛рдмрдд рдЪрд╛рдВрдЧрд▓рд╛, рд╡рд┐рд╢реНрд╡рд╛рд╕рд╛рд░реНрд╣ рд╕рд▓реНрд▓рд╛ рджреЗрдгреНрдпрд╛рдЪреА рд╣реЛрддреА, рдкрд░рдВрддреБ рдмреЗрдВрдЪрдорд╛рд░реНрдХрд┐рдВрдЧ рджрд░рдореНрдпрд╛рди рдЕрд╕реЗ рджрд┐рд╕реВрди рдЖрд▓реЗ рдХреА рдкреНрд░рддрд┐рдмрд┐рдВрдм рдорд▓рд╛ рд╡рд╛рдЯрд▓реЗ рддрд┐рддрдХреЗ рд╣рд│реВ рдирд╛рд╣реА, LINQ рдорд╛рдЭреНрдпрд╛ рджреБрдГрд╕реНрд╡рдкреНрдирд╛рдВрдкреЗрдХреНрд╖рд╛ рд╣рд│реВ рдЖрд╣реЗ. рдкрдг рд╢реЗрд╡рдЯреА рдЕрд╕реЗ рдирд┐рд╖реНрдкрдиреНрди рдЭрд╛рд▓реЗ рдХреА рдореА рджреЗрдЦреАрд▓ рдореЛрдЬрдорд╛рдкрд╛рдд рдЪреВрдХ рдХреЗрд▓реА рдЖрд╣реЗ... рдпрд╛ рдЬреАрд╡рдирдХрдереЗрдЪреЗ рддрдкрд╢реАрд▓ рдХрдЯрд╛рдЦрд╛рд▓реА рдЖрдгрд┐ рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрдордзреНрдпреЗ рдЖрд╣реЗрдд. рдЙрджрд╛рд╣рд░рдг рдЕрдЧрджреА рд╕рд╛рдорд╛рдиреНрдп рдЖрд╣реЗ рдЖрдгрд┐ рддрддреНрддреНрд╡рд╛рдиреБрд╕рд╛рд░ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЭрдордзреНрдпреЗ рдХреЗрд▓реЗ рдЬрд╛рддреЗ рддрд╕реЗ рдЕрдВрдорд▓рд╛рдд рдЖрдгрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ, рдорд╛рдЭреНрдпрд╛ рдорддреЗ, рдЬреАрд╡рдирд╛рдЪреЗ рдкреНрд░рд╛рддреНрдпрдХреНрд╖рд┐рдХ рд╣реЗ рдЦреВрдкрдЪ рдордиреЛрд░рдВрдЬрдХ рдард░рд▓реЗ: рд▓реЗрдЦрд╛рдЪреНрдпрд╛ рдореБрдЦреНрдп рд╡рд┐рд╖рдпрд╛рдЪреНрдпрд╛ рдЧрддреАрд╡рд░ рд╣реЛрдгрд╛рд░рд╛ рдкрд░рд┐рдгрд╛рдо рд▓рдХреНрд╖рд╛рдд рдпреЗрдгреНрдпрд╛рд╕рд╛рд░рдЦрд╛ рдирд╡реНрд╣рддрд╛. рдмрд╛рд╣реНрдп рддрд░реНрдХрд╛рдореБрд│реЗ: Moq, Autofac, EF Core рдЖрдгрд┐ рдЗрддрд░ "рдмрдБрдбрд┐рдВрдЧреНрдЬ".

рдореА рдпрд╛ рд▓реЗрдЦрд╛рдЪреНрдпрд╛ рдЫрд╛рдкрд╛рдЦрд╛рд▓реА рдХрд╛рдо рдХрд░рдгреНрдпрд╛рд╕ рд╕реБрд░реБрд╡рд╛рдд рдХреЗрд▓реА: рдкреНрд░рддрд┐рдмрд┐рдВрдм рдордВрдж рдХрд╛ рдЖрд╣реЗ

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

рдкрд░рд╛рд╡рд░реНрддрдирд╛рдЪреНрдпрд╛ рдЧрддреАрдмрджреНрджрд▓ рдорд╛рдЭреЗ рдиреЗрд╣рдореАрдЪ рдЕрд╕реЗрдЪ рдордд рдЖрд╣реЗ рд╣реЗ рд▓рдХреНрд╖рд╛рдд рдШреЗрддрд╛, рд▓реЗрдЦрдХрд╛рдЪреНрдпрд╛ рдирд┐рд╖реНрдХрд░реНрд╖рд╛рдВрд╡рд░ рдкреНрд░рд╢реНрдирдЪрд┐рдиреНрд╣ рдЙрдкрд╕реНрдерд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдорд╛рдЭрд╛ рд╡рд┐рд╢реЗрд╖ рд╣реЗрддреВ рдирд╡реНрд╣рддрд╛.

рдорд▓рд╛ рдЕрдиреЗрдХрджрд╛ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЭрдордзреНрдпреЗ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд╛рдЪрд╛ рднреЛрд│рд╛ рд╡рд╛рдкрд░ рдЖрдврд│рддреЛ. рдкреНрд░рдХрд╛рд░ рдШреЗрддрд▓рд╛ рдЖрд╣реЗ. рдорд╛рд▓рдорддреНрддреЗрдЪреА рдорд╛рд╣рд┐рддреА рдШреЗрддрд▓реА рдЬрд╛рддреЗ. SetValue рдкрджреНрдзрдд рдореНрд╣рдгрддрд╛рдд рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХрдЬрдг рдЖрдирдВрджрд┐рдд рд╣реЛрддреЛ. рд▓рдХреНрд╖реНрдп рдХреНрд╖реЗрддреНрд░рд╛рдд рдореВрд▓реНрдп рдЖрд▓реЗ рдЖрд╣реЗ, рдкреНрд░рддреНрдпреЗрдХрдЬрдг рдЖрдирдВрджреА рдЖрд╣реЗ. рдЕрддрд┐рд╢рдп рд╣реБрд╢рд╛рд░ рд▓реЛрдХ - рд╡рд░рд┐рд╖реНрда рдЖрдгрд┐ рдЯреАрдо рд▓реАрдбреНрд╕ - рддреНрдпрд╛рдВрдЪреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдСрдмреНрдЬреЗрдХреНрдЯрд╡рд░ рд▓рд┐рд╣рд┐рддрд╛рдд, рдЕрд╢рд╛ рдирд┐рд╖реНрдХрд▓рдВрдХ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪреНрдпрд╛ рдЖрдзрд╛рд░реЗ рдПрдХрд╛ рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ "рд╕рд╛рд░реНрд╡рддреНрд░рд┐рдХ" рдореЕрдкрд░реНрд╕рд╡рд░ рдЖрдзрд╛рд░рд┐рдд. рд╕рд╛рд░ рд╕рд╛рдорд╛рдиреНрдпрддрдГ рд╣реЗ рдЖрд╣реЗ: рдЖрдореНрд╣реА рд╕рд░реНрд╡ рдлреАрд▓реНрдб рдШреЗрддреЛ, рд╕рд░реНрд╡ рдЧреБрдгрдзрд░реНрдо рдШреЗрддреЛ, рддреНрдпрд╛рд╡рд░ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдХрд░рддреЛ: рдЬрд░ рдкреНрд░рдХрд╛рд░ рд╕рджрд╕реНрдпрд╛рдВрдЪреА рдирд╛рд╡реЗ рдЬреБрд│рдд рдЕрд╕рддреАрд▓ рддрд░ рдЖрдореНрд╣реА рд╕реЗрдЯрд╡реНрд╣реЕрд▓реНрдпреВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддреЛ. рд╡реЗрд│реЛрд╡реЗрд│реА рдЖрдореНрд╣реА рдЪреБрдХрд╛рдВрдореБрд│реЗ рдЕрдкрд╡рд╛рдж рдкрдХрдбрддреЛ рдЬреЗрдереЗ рдЖрдореНрд╣рд╛рд▓рд╛ рдПрдХрд╛ рдкреНрд░рдХрд╛рд░рд╛рдд рдХрд╛рд╣реА рдорд╛рд▓рдорддреНрддрд╛ рдЖрдврд│рд▓реА рдирд╛рд╣реА, рдкрд░рдВрддреБ рдпреЗрдереЗ рджреЗрдЦреАрд▓ рдПрдХ рдорд╛рд░реНрдЧ рдЖрд╣реЗ рдЬреЛ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рд╕реБрдзрд╛рд░рддреЛ. рдкреНрд░рдпрддреНрди рдХрд░рд╛ / рдкрдХрдбрд╛.

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

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

рдХреЙрд▓рд┐рдВрдЧ рд░рд┐рдлреНрд▓реЗрдХреНрд╢рди CLR рд▓рд╛ рддреНрдпрд╛рдВрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓рд╛ рдПрдХ рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА, рддреНрдпрд╛рдВрдЪрд╛ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХрд╛рдврдгреНрдпрд╛рд╕рд╛рдареА, рддреНрдпрд╛рдВрдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрд╕реЗрдВрдмреНрд▓реАрдордзреВрди рдЬрд╛рдгреНрдпрд╛рд╕ рднрд╛рдЧ рдкрд╛рдбрддреЗ. рдпрд╛ рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рд╕реАрдХреНрд╡реЗрдиреНрд╕ рдЯреНрд░реЕрд╡реНрд╣рд░реНрд╕ рдХрд░рддрд╛рдирд╛ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рдореЗрдорд░реАрдЪреЗ рд╡рд╛рдЯрдк рдХрд░рддреЗ. рдЖрдореНрд╣реА рдореЗрдорд░реА рд╡рд╛рдкрд░рдд рдЖрд╣реЛрдд, рд╕реАрдПрд▓рдЖрд░ рдЬреАрд╕реА рдЙрдШрдбрддреЗ рдЖрдгрд┐ рдлреНрд░рд┐рдЬ рд╕реБрд░реВ рд╣реЛрддреЗ. рдорд╛рдЭреНрдпрд╛рд╡рд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдареЗрд╡рд╛, рд╣реЗ рд▓рдХреНрд╖рдгреАрдп рд╣рд│реВ рдЕрд╕рд╛рд╡реЗ. рдЖрдзреБрдирд┐рдХ рдЙрддреНрдкрд╛рджрди рд╕рд░реНрд╡реНрд╣рд░ рдХрд┐рдВрд╡рд╛ рдХреНрд▓рд╛рдЙрдб рдорд╢реАрдирд╡рд░реАрд▓ рдореЗрдорд░реА рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рдЙрдЪреНрдЪ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡рд┐рд▓рдВрдм рдЯрд╛рд│рдд рдирд╛рд╣реА. рдЦрд░рдВ рддрд░, рдЬрд┐рддрдХреА рдЬрд╛рд╕реНрдд рдореЗрдорд░реА, GC рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реЗ рд▓рдХреНрд╖рд╛рдд рдпреЗрдгреНрдпрд╛рдЪреА рд╢рдХреНрдпрддрд╛ рдЬрд╛рд╕реНрдд рдЕрд╕рддреЗ. рдкреНрд░рддрд┐рдмрд┐рдВрдм, рд╕рд┐рджреНрдзрд╛рдВрддрддрдГ, рддреНрдпрд╛рдЪреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рд▓ рдЪрд┐рдВрдзреА рдЖрд╣реЗ.

рддрдерд╛рдкрд┐, рдЖрдореНрд╣реА рд╕рд░реНрд╡ IoC рдХрдВрдЯреЗрдирд░ рдЖрдгрд┐ рддрд╛рд░реАрдЦ рдореЕрдкрд░реНрд╕ рд╡рд╛рдкрд░рддреЛ, рдЬреНрдпрд╛рдЪреЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рддрддреНрддреНрд╡ рджреЗрдЦреАрд▓ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд╛рдВрд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЖрд╣реЗ, рдкрд░рдВрддреБ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрдмрджреНрджрд▓ рд╕рд╣рд╕рд╛ рдХреЛрдгрддреЗрд╣реА рдкреНрд░рд╢реНрди рдирд╕рддрд╛рдд. рдирд╛рд╣реА, рдирд╛рд╣реА рдХрд╛рд░рдг рдмрд╛рд╣реНрдп рдорд░реНрдпрд╛рджрд┐рдд рд╕рдВрджрд░реНрдн рдореЙрдбреЗрд▓реНрд╕рдордзреВрди рдЕрд╡рд▓рдВрдмрдирд╛рдВрдЪрд╛ рдкрд░рд┐рдЪрдп рдЖрдгрд┐ рдЕрдореВрд░реНрддрддрд╛ рдЗрддрдХреА рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдХреА рдЖрдореНрд╣рд╛рд▓рд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдкрд░рд┐рд╕реНрдерд┐рддреАрдд рдХрд╛рдордЧрд┐рд░реАрдЪрд╛ рддреНрдпрд╛рдЧ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧреЗрд▓. рд╕рд░реНрд╡ рдХрд╛рд╣реА рд╕реЛрдкреЗ рдЖрд╣реЗ - рдпрд╛рдЪрд╛ рдЦрд░реЛрдЦрд░ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рдирд╛рд╡рд░ рдлрд╛рд░рд╕рд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдд рдирд╛рд╣реА.

рд╡рд╕реНрддреБрд╕реНрдерд┐рддреА рдЕрд╢реА рдЖрд╣реЗ рдХреА рдкреНрд░рддрд┐рдмрд┐рдВрдм рддрдВрддреНрд░рдЬреНрдЮрд╛рдирд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рд╕рд░реНрд╡рд╛рдд рд╕рд╛рдорд╛рдиреНрдп рдлреНрд░реЗрдорд╡рд░реНрдХ рддреНрдпрд╛рдЪреНрдпрд╛рд╕рд╣ рдЕрдзрд┐рдХ рдЪрд╛рдВрдЧрд▓реНрдпрд╛ рдкреНрд░рдХрд╛рд░реЗ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рд░реНрд╡ рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рдпреБрдХреНрддреНрдпрд╛ рд╡рд╛рдкрд░рддрд╛рдд. рд╕рд╣рд╕рд╛ рд╣реЗ рдХреЕрд╢реЗ рдЕрд╕рддреЗ. рд╕рд╛рдорд╛рдиреНрдпрддрдГ рд╣реЗ рдЕрднрд┐рд╡реНрдпрдХреНрддреА рдЖрдгрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддреА рдЯреНрд░реА рд╡рд░реВрди рд╕рдВрдХрд▓рд┐рдд рдХреЗрд▓реЗрд▓реЗ рдкреНрд░рддрд┐рдирд┐рдзреА рдЕрд╕рддрд╛рдд. рддреЛрдЪ рдСрдЯреЛрдореЕрдкрд░ рдПрдХ рд╕реНрдкрд░реНрдзрд╛рддреНрдордХ рд╢рдмреНрджрдХреЛрд╢ рд░рд╛рдЦрддреЛ рдЬреЛ рдлрдВрдХреНрд╢рдиреНрд╕рд╕рд╣ рдкреНрд░рдХрд╛рд░рд╛рдВрд╢реА рдЬреБрд│рддреЛ рдЬреЗ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЙрд▓ рди рдХрд░рддрд╛ рдПрдХрдореЗрдХрд╛рдВрдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░реВ рд╢рдХрддрд╛рдд.

рд╣реЗ рдХрд╕реЗ рд╕рд╛рдзреНрдп рд╣реЛрддреЗ? рдореВрд▓рдд:, рд╣реЗ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдо рд╕реНрд╡рддрдГ JIT рдХреЛрдб рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рддрд░реНрдХрд╛рдкреЗрдХреНрд╖рд╛ рд╡реЗрдЧрд│реЗ рдирд╛рд╣реА. рдЬреЗрд╡реНрд╣рд╛ рдПрдЦрд╛рджреА рдкрджреНрдзрдд рдкреНрд░рдердордЪ рдХреЙрд▓ рдХреЗрд▓реА рдЬрд╛рддреЗ, рддреЗрд╡реНрд╣рд╛ рддреА рд╕рдВрдХрд▓рд┐рдд рдХреЗрд▓реА рдЬрд╛рддреЗ (рдЖрдгрд┐, рд╣реЛрдп, рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЬрд▓рдж рдирд╛рд╣реА); рддреНрдпрд╛рдирдВрддрд░рдЪреНрдпрд╛ рдХреЙрд▓рд╡рд░, рдирд┐рдпрдВрддреНрд░рдг рдЖрдзреАрдЪ рд╕рдВрдХрд▓рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдкрджреНрдзрддреАрд╡рд░ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ рдЖрдгрд┐ рдХреЛрдгрддреЗрд╣реА рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рдХрдореА рд╣реЛрдгрд╛рд░ рдирд╛рд╣реА.

рдЖрдордЪреНрдпрд╛ рдмрд╛рдмрддреАрдд, рддреБрдореНрд╣реА JIT рд╕рдВрдХрд▓рди рджреЗрдЦреАрд▓ рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рдирдВрддрд░ рд╕рдВрдХрд▓рд┐рдд рд╡рд░реНрддрди рддреНрдпрд╛рдЪреНрдпрд╛ AOT рд╕рдордХрдХреНрд╖рд╛рдВрдкреНрд░рдорд╛рдгреЗрдЪ рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрд╕рд╣ рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛. рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд рдЕрднрд┐рд╡реНрдпрдХреНрддреА рдЖрдордЪреНрдпрд╛ рдорджрддреАрд▓рд╛ рдпреЗрддреАрд▓.

рдкреНрд░рд╢реНрдирд╛рддреАрд▓ рддрддреНрддреНрд╡ рдереЛрдбрдХреНрдпрд╛рдд рдЦрд╛рд▓реАрд▓рдкреНрд░рдорд╛рдгреЗ рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ:
рд╕рдВрдХрд▓рд┐рдд рдлрдВрдХреНрд╢рди рдЕрд╕рд▓реЗрд▓реЗ рдкреНрд░рддрд┐рдирд┐рдзреА рдореНрд╣рдгреВрди рддреБрдореНрд╣реА рдкрд░рд╛рд╡рд░реНрддрдирд╛рдЪрд╛ рдЕрдВрддрд┐рдо рдирд┐рдХрд╛рд▓ рдХреЕрд╢реЗ рдХреЗрд▓рд╛ рдкрд╛рд╣рд┐рдЬреЗ. рддреБрдордЪреНрдпрд╛ рдкреНрд░рдХрд╛рд░рд╛рддреАрд▓, рдХрд╛рд░реНрдпрдХрд░реНрддреНрдпрд╛рдЪреНрдпрд╛ рдлреАрд▓реНрдбрдордзреАрд▓ рд╕рд░реНрд╡ рдЖрд╡рд╢реНрдпрдХ рд╡рд╕реНрддреВрдВрдЪреНрдпрд╛ рдорд╛рд╣рд┐рддреАрд╕рд╣ рдХреЕрд╢реЗ рдХрд░рдгреЗ рджреЗрдЦреАрд▓ рдЕрд░реНрдердкреВрд░реНрдг рдЖрд╣реЗ, рдЬреЗ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рдЪреНрдпрд╛ рдмрд╛рд╣реЗрд░ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдЖрд╣реЗрдд.

рдпрд╛рдд рддрд░реНрдХ рдЖрд╣реЗ. рдХреЙрдорди рд╕реЗрдиреНрд╕ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╕рд╛рдВрдЧрддреЗ рдХреА рдЬрд░ рдПрдЦрд╛рджреА рдЧреЛрд╖реНрдЯ рд╕рдВрдХрд▓рд┐рдд рдЖрдгрд┐ рдХреЕрд╢ рдХрд░рддрд╛ рдпреЗрдд рдЕрд╕реЗрд▓ рддрд░ рддреА рдХреЗрд▓реА рдкрд╛рд╣рд┐рдЬреЗ.

рдкреБрдвреЗ рдкрд╛рд╣рддрд╛рдирд╛, рдЕрд╕реЗ рдореНрд╣рдЯрд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ рдХреА рдкреНрд░рддрд┐рдмрд┐рдВрдмрд╛рдВрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдХреЕрд╢реЗрдЪреЗ рддреНрдпрд╛рдЪреЗ рдлрд╛рдпрджреЗ рдЖрд╣реЗрдд, рдЬрд░реА рдЖрдкрдг рдЕрднрд┐рд╡реНрдпрдХреНрддреА рд╕рдВрдХрд▓рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкрджреНрдзрдд рд╡рд╛рдкрд░рд▓реА рдирд╛рд╣реА рддрд░реАрд╣реА. рдЦрд░рдВ рддрд░, рдореА рд╡рд░ рдЙрд▓реНрд▓реЗрдЦ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд▓реЗрдЦрд╛рдЪреНрдпрд╛ рд▓реЗрдЦрдХрд╛рдЪреНрдпрд╛ рд╢реЛрдзрдирд┐рдмрдВрдзрд╛рдВрдЪреА рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдХрд░рдд рдЖрд╣реЗ.

рдЖрддрд╛ рдХреЛрдбрдмрджреНрджрд▓. рдЪрд▓рд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд╛рд╣реВ рдЬреЗ рдорд╛рдЭреНрдпрд╛ рдЕрд▓реАрдХрдбреАрд▓ рд╡реЗрджрдирд╛рдВрд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЖрд╣реЗ рдЬреНрдпрд╛рдЪрд╛ рдорд▓рд╛ рдЧрдВрднреАрд░ рдХреНрд░реЗрдбрд┐рдЯ рд╕рдВрд╕реНрдереЗрдЪреНрдпрд╛ рдЧрдВрднреАрд░ рдЙрддреНрдкрд╛рджрдирд╛рдд рд╕рд╛рдордирд╛ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧрд▓рд╛. рдХреЛрдгреАрд╣реА рдЕрдВрджрд╛рдЬ рд▓рд╛рд╡реВ рдирдпреЗ рдореНрд╣рдгреВрди рд╕рд░реНрд╡ рд╕рдВрд╕реНрдерд╛ рдХрд╛рд▓реНрдкрдирд┐рдХ рдЖрд╣реЗрдд.

рдХрд╛рд╣реА рд╕рд╛рд░ рдЖрд╣реЗ. рд╕рдВрдкрд░реНрдХ рдЕрд╕реВ рджреНрдпрд╛. рдкреНрд░рдорд╛рдгрд┐рдд рд╢рд░реАрд░рд╛рд╕рд╣ рдЕрдХреНрд╖рд░реЗ рдЖрд╣реЗрдд, рдЬреНрдпрд╛рд╡рд░реВрди рдкрд╛рд░реНрд╕рд░ рдЖрдгрд┐ рд╣рд╛рдпрдбреНрд░реЗрдЯрд░ рд╕рдорд╛рди рд╕рдВрдкрд░реНрдХ рддрдпрд╛рд░ рдХрд░рддрд╛рдд. рдПрдХ рдкрддреНрд░ рдЖрд▓реЗ, рдЖрдореНрд╣реА рддреЗ рд╡рд╛рдЪрд▓реЗ, рддреЗ рдХреА-рд╡реНрд╣реЕрд▓реНрдпреВ рдЬреЛрдбреНрдпрд╛рдВрдордзреНрдпреЗ рдкрд╛рд░реНрд╕ рдХреЗрд▓реЗ, рдПрдХ рд╕рдВрдкрд░реНрдХ рддрдпрд╛рд░ рдХреЗрд▓рд╛ рдЖрдгрд┐ рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рд╕реЗрд╡реНрд╣ рдХреЗрд▓рд╛.

рддреЗ рдкреНрд░рд╛рдердорд┐рдХ рдЖрд╣реЗ. рд╕рдордЬрд╛ рд╕рдВрдкрд░реНрдХрд╛рдд рдкреВрд░реНрдг рдирд╛рд╡, рд╡рдп рдЖрдгрд┐ рд╕рдВрдкрд░реНрдХ рдлреЛрди рд╣реЗ рдЧреБрдгрдзрд░реНрдо рдЖрд╣реЗрдд. рд╣рд╛ рдбреЗрдЯрд╛ рдкрддреНрд░рд╛рджреНрд╡рд╛рд░реЗ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рддреЛ. рдЕрдХреНрд╖рд░рд╛рдЪреНрдпрд╛ рдореБрдЦреНрдп рднрд╛рдЧрд╛рдордзреНрдпреЗ рдЬреЛрдбреНрдпрд╛рдВрдордзреНрдпреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдЧреБрдгрдзрд░реНрдо рдореЕрдк рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдирд╡реАрди рдХреА рдЬреЛрдбрдгреНрдпрд╛рд╕рд╛рдареА рд╕рдХреНрд╖рдо рд╣реЛрдгреНрдпрд╛рд╕рд╛рдареА рд╡реНрдпрд╡рд╕рд╛рдпрд╛рд▓рд╛ рд╕рдорд░реНрдерди рджреЗрдЦреАрд▓ рд╣рд╡реЗ рдЖрд╣реЗ. рдЬрд░ рдПрдЦрд╛рджреНрдпрд╛рдиреЗ рдЯреЗрдореНрдкрд▓реЗрдЯрдордзреНрдпреЗ рдЯрд╛рдпрдкрд┐рдВрдЧ рдХреЗрд▓реА рдЕрд╕реЗрд▓ рдХрд┐рдВрд╡рд╛ рд░рд┐рд▓реАрдЭ рд╣реЛрдгреНрдпрд╛рдкреВрд░реНрд╡реА рдирд╡реАрди рдлреЙрд░рдореЕрдЯрд╢реА рдЬреБрд│рд╡реВрди рдШреЗрдд, рдирд╡реАрди рднрд╛рдЧреАрджрд╛рд░рд╛рдХрдбреВрди рдореЕрдкрд┐рдВрдЧ рддрд╛рддрдбреАрдиреЗ рд╕реБрд░реВ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдордЧ рдЖрдореНрд╣реА рд╕реНрд╡рд╕реНрдд рдбреЗрдЯрд╛рдлрд┐рдХреНрд╕ рдореНрд╣рдгреВрди рдирд╡реАрди рдореЕрдкрд┐рдВрдЧ рд╕рд╣рд╕рдВрдмрдВрдз рдЬреЛрдбреВ рд╢рдХрддреЛ. рдореНрд╣рдгрдЬреЗ рдЬреАрд╡рдирд╛рдЪреЗ рдЙрджрд╛рд╣рд░рдг.

рдЖрдореНрд╣реА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдХрд░рддреЛ, рдЪрд╛рдЪрдгреНрдпрд╛ рддрдпрд╛рд░ рдХрд░рддреЛ. рдХрд╛рд░реНрдп рдХрд░рддреЗ.

рдореА рдХреЛрдб рдкреНрд░рджрд╛рди рдХрд░рдгрд╛рд░ рдирд╛рд╣реА: рдмрд░реЗрдЪ рд╕реНрддреНрд░реЛрдд рдЖрд╣реЗрдд рдЖрдгрд┐ рддреЗ рд▓реЗрдЦрд╛рдЪреНрдпрд╛ рд╢реЗрд╡рдЯреА рд▓рд┐рдВрдХрджреНрд╡рд╛рд░реЗ GitHub рд╡рд░ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗрдд. рддреБрдореНрд╣реА рддреНрдпрд╛рдВрдирд╛ рд▓реЛрдб рдХрд░реВ рд╢рдХрддрд╛, рддреНрдпрд╛рдВрдирд╛ рдУрд│рдЦрдгреНрдпрд╛рдкрд▓реАрдХрдбреЗ рдЫрд│реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреЗ рдореЛрдЬрдорд╛рдк рдХрд░реВ рд╢рдХрддрд╛, рдХрд╛рд░рдг рддреНрдпрд╛рдЪрд╛ рддреБрдордЪреНрдпрд╛ рдмрд╛рдмрддреАрдд рдкрд░рд┐рдгрд╛рдо рд╣реЛрдИрд▓. рдореА рдлрдХреНрдд рджреЛрди рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкрджреНрдзрддреАрдВрдЪрд╛ рдХреЛрдб рджреЗрдИрди рдЬреЗ рд╣рд╛рдпрдбреНрд░реЗрдЯрд░рд▓рд╛ рд╡реЗрдЧрд│реЗ рдХрд░рддрд╛рдд, рдЬреЗ рдЬрд▓рдж рдЕрд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ рд╣реЛрддреЗ, рд╣рд╛рдпрдбреНрд░реЗрдЯрд░рдкрд╛рд╕реВрди, рдЬреЗ рд╕реНрд▓реЛ рдЕрд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ рд╣реЛрддреЗ.

рд▓реЙрдЬрд┐рдХ рдЦрд╛рд▓реАрд▓рдкреНрд░рдорд╛рдгреЗ рдЖрд╣реЗ: рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкрджреНрдзрдд рдореВрд▓рднреВрдд рдкрд╛рд░реНрд╕рд░ рд▓реЙрдЬрд┐рдХрджреНрд╡рд╛рд░реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЬреЛрдбреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ. LINQ рд▓реЗрдпрд░ рд╣рд╛ рд╣рд╛рдпрдбреНрд░реЗрдЯрд░рдЪрд╛ рдкрд╛рд░реНрд╕рд░ рдЖрдгрд┐ рдореВрд▓рднреВрдд рддрд░реНрдХ рдЖрд╣реЗ, рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрджрд░реНрднрд╛рд╕рд╛рдареА рд╡рд┐рдирдВрддреА рдХрд░рддреЛ рдЖрдгрд┐ рдкрд╛рд░реНрд╕рд░рдордзреАрд▓ рдЬреЛрдбреНрдпрд╛рдВрд╕рд╣ рдХреАрдЪреА рддреБрд▓рдирд╛ рдХрд░рддреЛ (рдпрд╛ рдХрд╛рд░реНрдпрд╛рдВрд╕рд╛рдареА рддреБрд▓рдирд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА LINQ рд╢рд┐рд╡рд╛рдп рдХреЛрдб рдЖрд╣реЗ). рдкреБрдвреЗ, рдЬреЛрдбреНрдпрд╛ рдореБрдЦреНрдп рд╣рд╛рдпрдбреНрд░реЗрд╢рди рдкрджреНрдзрддреАрдХрдбреЗ рдкрд╛рдард╡рд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд рдЖрдгрд┐ рдЬреЛрдбреНрдпрд╛рдВрдЪреА рдореВрд▓реНрдпреЗ рдШрдЯрдХрд╛рдЪреНрдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдЧреБрдгрдзрд░реНрдорд╛рдВрд╡рд░ рд╕реЗрдЯ рдХреЗрд▓реА рдЬрд╛рддрд╛рдд.

тАЬрдлрд╛рд╕реНрдЯтАЭ (рдмреЗрдВрдЪрдорд╛рд░реНрдХрдордзреНрдпреЗ рдЙрдкрд╕рд░реНрдЧ рдлрд╛рд╕реНрдЯ):

 protected override Contact GetContact(PropertyToValueCorrelation[] correlations)
        {
            var contact = new Contact();
            foreach (var setterMapItem in _proprtySettersMap)
            {
                var correlation = correlations.FirstOrDefault(x => x.PropertyName == setterMapItem.Key);
                setterMapItem.Value(contact, correlation?.Value);
            }
            return contact;
        }

рдЬрд╕реЗ рдЖрдкрдг рдкрд╛рд╣реВ рд╢рдХрддреЛ, рд╕реЗрдЯрд░ рдЧреБрдгрдзрд░реНрдорд╛рдВрд╕рд╣ рдПрдХ рд╕реНрдерд┐рд░ рд╕рдВрдЧреНрд░рд╣ рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рддреЛ - рд╕рдВрдХрд▓рд┐рдд рд▓реЕрдореНрдмрдбрд╛рд╕ рдЬреНрдпрд╛рд▓рд╛ рд╕реЗрдЯрд░ рдШрдЯрдХ рдореНрд╣рдгрддрд╛рдд. рдЦрд╛рд▓реАрд▓ рдХреЛрдбрджреНрд╡рд╛рд░реЗ рддрдпрд╛рд░ рдХреЗрд▓реЗ:

        static FastContactHydrator()
        {
            var type = typeof(Contact);
            foreach (var property in type.GetProperties())
            {
                _proprtySettersMap[property.Name] = GetSetterAction(property);
            }
        }

        private static Action<Contact, string> GetSetterAction(PropertyInfo property)
        {
            var setterInfo = property.GetSetMethod();
            var paramValueOriginal = Expression.Parameter(property.PropertyType, "value");
            var paramEntity = Expression.Parameter(typeof(Contact), "entity");
            var setterExp = Expression.Call(paramEntity, setterInfo, paramValueOriginal).Reduce();
            
            var lambda = (Expression<Action<Contact, string>>)Expression.Lambda(setterExp, paramEntity, paramValueOriginal);

            return lambda.Compile();
        }

рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ рд╣реЗ рд╕реНрдкрд╖реНрдЯ рдЖрд╣реЗ. рдЖрдореНрд╣реА рдЧреБрдгрдзрд░реНрдо рдкрд╛рд░ рдХрд░рддреЛ, рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рддрд┐рдирд┐рдзреА рддрдпрд╛рд░ рдХрд░рддреЛ рдЬреЗ рд╕реЗрдЯрд░ рдХреЙрд▓ рдХрд░рддрд╛рдд рдЖрдгрд┐ рддреНрдпрд╛рдВрдирд╛ рдЬрддрди рдХрд░рддрд╛рдд. рдордЧ рдЧрд░рдЬ рдЕрд╕реЗрд▓ рддреЗрд╡реНрд╣рд╛ рдлреЛрди рдХрд░рддреЛ.

тАЬрд╕реНрд▓реЛтАЭ (рдмреЗрдВрдЪрдорд╛рд░реНрдХрдордзреНрдпреЗ рдкреНрд░рд┐рдлрд┐рдХреНрд╕ рд╕реНрд▓реЛ):

        protected override Contact GetContact(PropertyToValueCorrelation[] correlations)
        {
            var contact = new Contact();
            foreach (var property in _properties)
            {
                var correlation = correlations.FirstOrDefault(x => x.PropertyName == property.Name);
                if (correlation?.Value == null)
                    continue;

                property.SetValue(contact, correlation.Value);
            }
            return contact;
        }

рдпреЗрдереЗ рдЖрдореНрд╣реА рд▓рдЧреЗрдЪ рдЧреБрдгрдзрд░реНрдо рдмрд╛рдпрдкрд╛рд╕ рдХрд░рддреЛ рдЖрдгрд┐ рд╕реЗрдЯрд╡реНрд╣реЕрд▓реНрдпреВрд▓рд╛ рдереЗрдЯ рдХреЙрд▓ рдХрд░рддреЛ.

рд╕реНрдкрд╖реНрдЯрддреЗрд╕рд╛рдареА рдЖрдгрд┐ рд╕рдВрджрд░реНрдн рдореНрд╣рдгреВрди, рдореА рдПрдХ рд╕рд╛рдзреА рдкрджреНрдзрдд рд▓рд╛рдЧреВ рдХреЗрд▓реА рдЖрд╣реЗ рдЬреА рддреНрдпрд╛рдВрдЪреНрдпрд╛ рд╕рд╣рд╕рдВрдмрдВрдз рдЬреЛрдбреНрдпрд╛рдВрдЪреА рдореВрд▓реНрдпреЗ рдереЗрдЯ рдШрдЯрдХ рдлреАрд▓реНрдбрдордзреНрдпреЗ рд▓рд┐рд╣рд┐рддреЗ. рдЙрдкрд╕рд░реНрдЧ - рдореЕрдиреНрдпреБрдЕрд▓.

рдЖрддрд╛ рдмреЗрдВрдЪрдорд╛рд░реНрдХрдбреЙрдЯрдиреЗрдЯ рдШреЗрдК рдЖрдгрд┐ рдХрд╛рдордЧрд┐рд░реА рддрдкрд╛рд╕реВ. рдЖрдгрд┐ рдЕрдЪрд╛рдирдХ... (рд╕реНрдкреЙрдпрд▓рд░ - рд╣рд╛ рдпреЛрдЧреНрдп рдирд┐рдХрд╛рд▓ рдирд╛рд╣реА, рддрдкрд╢реАрд▓ рдЦрд╛рд▓реА рджрд┐рд▓рд╛ рдЖрд╣реЗ)

рдЧрддрд┐рдорд╛рди рдкреНрд░рддрд┐рдмрд┐рдВрдм рдмрджреНрджрд▓ рдЕрдпрд╢рд╕реНрд╡реА рд▓реЗрдЦ

рдЖрдореНрд╣реА рдпреЗрдереЗ рдХрд╛рдп рдкрд╛рд╣рддреЛ? рдЬреНрдпрд╛ рдкрджреНрдзрддреА рд╡рд┐рдЬрдпреАрдкрдгреЗ рд╡реЗрдЧрд╡рд╛рди рдЙрдкрд╕рд░реНрдЧ рдзрд╛рд░рдг рдХрд░рддрд╛рдд рддреНрдпрд╛ рд╕реНрд▓реЛ рдЙрдкрд╕рд░реНрдЧ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдкрджреНрдзрддреАрдВрдкреЗрдХреНрд╖рд╛ рдЬрд╡рд│рдЬрд╡рд│ рд╕рд░реНрд╡ рдкрд╛рд╕рд╛рдВрдордзреНрдпреЗ рд╣рд│реВ рдЕрд╕рддрд╛рдд. рд╣реЗ рд╡рд╛рдЯрдк рдЖрдгрд┐ рдХрд╛рдорд╛рдЪреА рдЧрддреА рдпрд╛ рджреЛрдиреНрд╣реА рдмрд╛рдмрддреАрдд рдЦрд░реЗ рдЖрд╣реЗ. рджреБрд╕рд░реАрдХрдбреЗ, рдЬреЗрдереЗ рд╢рдХреНрдп рдЕрд╕реЗрд▓ рддреЗрдереЗ LINQ рдкрджреНрдзрддреА рд╡рд╛рдкрд░реВрди рдореЕрдкрд┐рдВрдЧрдЪреА рд╕реБрдВрджрд░ рдЖрдгрд┐ рдореЛрд╣рдХ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА, рдЙрд▓рдЯрдкрдХреНрд╖реА, рдЙрддреНрдкрд╛рджрдХрддрд╛ рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рдХрдореА рдХрд░рддреЗ. рдлрд░рдХ рдСрд░реНрдбрд░рдЪрд╛ рдЖрд╣реЗ. рдкрд╛рд╕рдЪреНрдпрд╛ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╕рдВрдЦреНрдпреЗрдиреЗ рдХрд▓ рдмрджрд▓рдд рдирд╛рд╣реА. рдлрд░рдХ рдлрдХреНрдд рд╕реНрдХреЗрд▓рдордзреНрдпреЗ рдЖрд╣реЗ. LINQ рд╕рд╣ рддреЗ 4 - 200 рдкрдЯ рдХрдореА рдЖрд╣реЗ, рдЕрдВрджрд╛рдЬреЗ рддреНрдпрд╛рдЪ рдкреНрд░рдорд╛рдгрд╛рдд рдЬрд╛рд╕реНрдд рдХрдЪрд░рд╛ рдЖрд╣реЗ.

рдЕрджреНрдпрддрдирд┐рдд

рдорд╛рдЭрд╛ рдорд╛рдЭреНрдпрд╛ рдбреЛрд│реНрдпрд╛рдВрд╡рд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдмрд╕рд▓рд╛ рдирд╛рд╣реА, рдкрдг рд╕рд░реНрд╡рд╛рдд рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдореНрд╣рдгрдЬреЗ рдЖрдордЪреНрдпрд╛ рд╕рд╣рдХрд╛рд▒реНрдпрд╛рдЪрд╛ рдорд╛рдЭреНрдпрд╛ рдбреЛрд│реНрдпрд╛рдВрд╡рд░ рдХрд┐рдВрд╡рд╛ рдорд╛рдЭреНрдпрд╛ рдХреЛрдбрд╡рд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдмрд╕рд▓рд╛ рдирд╛рд╣реА - рджрд┐рдорд┐рддреНрд░реА рддрд┐рдЦреЛрдиреЛрд╡ 0x1000000. рдорд╛рдЭреЗ рд╕рдорд╛рдзрд╛рди рджреЛрдирджрд╛ рддрдкрд╛рд╕рд▓реНрдпрд╛рдирдВрддрд░, рддреНрдпрд╛рдиреЗ рдЙрддреНрдХреГрд╖реНрдЯрдкрдгреЗ рд╢реЛрдзреВрди рдХрд╛рдврд▓реЗ рдЖрдгрд┐ рдПрдХ рддреНрд░реБрдЯреА рдирд┐рджрд░реНрд╢рдирд╛рд╕ рдЖрдгреВрди рджрд┐рд▓реА рдЬреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрддреАрд▓ рдЕрдиреЗрдХ рдмрджрд▓рд╛рдВрдореБрд│реЗ рдореА рдЪреБрдХрд▓реЛ, рд╕реБрд░реБрд╡рд╛рддреАрдкрд╛рд╕реВрди рдЕрдВрддрд┐рдо. Moq рд╕реЗрдЯрдЕрдкрдордзреНрдпреЗ рдЖрдврд│рд▓реЗрд▓реНрдпрд╛ рдмрдЧрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рд╕рд░реНрд╡ рдкрд░рд┐рдгрд╛рдо рдЬрд╛рдЧреЗрд╡рд░ рдкрдбрд▓реЗ. рдкреБрдирд░реНрдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдгрд╛рдорд╛рдВрдиреБрд╕рд╛рд░, рдореБрдЦреНрдп рдкреНрд░рд╡реГрддреНрддреА рдмрджрд▓рдд рдирд╛рд╣реА - LINQ рдЕрджреНрдпрд╛рдк рдкреНрд░рддрд┐рдмрд┐рдВрдмрд╛рдкреЗрдХреНрд╖рд╛ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рдирд╛рд╡рд░ рдЕрдзрд┐рдХ рдкрд░рд┐рдгрд╛рдо рдХрд░рддреЗ. рддрдерд╛рдкрд┐, рд╣реЗ рдЫрд╛рди рдЖрд╣реЗ рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддреА рд╕рдВрдХрд▓рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреЗ рдХрд╛рд░реНрдп рд╡реНрдпрд░реНрде рдард░рд▓реЗ рдирд╛рд╣реА рдЖрдгрд┐ рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдЯрдк рдЖрдгрд┐ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд╡реЗрд│реЗрдд рджреЛрдиреНрд╣реА рджреГрд╢реНрдпрдорд╛рди рдЖрд╣реЗ. рдкрд╣рд┐рд▓реЗ рдкреНрд░рдХреНрд╖реЗрдкрдг, рдЬреЗрд╡реНрд╣рд╛ рд╕реНрдЯреЕрдЯрд┐рдХ рдлреАрд▓реНрдб рд╕реБрд░реВ рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд, рддреЗ рдиреИрд╕рд░реНрдЧрд┐рдХрд░рд┐рддреНрдпрд╛ "рдЬрд▓рдж" рдкрджреНрдзрддреАрд╕рд╛рдареА рд╣рд│реВ рд╣реЛрддреЗ, рдкрд░рдВрддреБ рдирдВрддрд░ рдкрд░рд┐рд╕реНрдерд┐рддреА рдмрджрд▓рддреЗ.

рдкреБрдиреНрд╣рд╛ рдЪрд╛рдЪрдгреАрдЪрд╛ рдирд┐рдХрд╛рд▓ рдпреЗрдереЗ рдЖрд╣реЗ:

рдЧрддрд┐рдорд╛рди рдкреНрд░рддрд┐рдмрд┐рдВрдм рдмрджреНрджрд▓ рдЕрдпрд╢рд╕реНрд╡реА рд▓реЗрдЦ

рдирд┐рд╖реНрдХрд░реНрд╖: рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЭрдордзреНрдпреЗ рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╡рд╛рдкрд░рддрд╛рдирд╛, рдпреБрдХреНрддреНрдпрд╛ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рд╡рд┐рд╢реЗрд╖ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╛рд╣реА - LINQ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдЕрдзрд┐рдХ рдЦрд╛рдИрд▓. рддрдерд╛рдкрд┐, рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдЙрдЪреНрдЪ-рд▓реЛрдб рдкрджреНрдзрддреАрдВрдордзреНрдпреЗ, рдЖрдкрдг рдЗрдирд┐рд╢рд┐рдПрд▓рд╛рдпрдЭрд░реНрд╕ рдЖрдгрд┐ рдкреНрд░рддрд┐рдирд┐рдзреА рдХрдВрдкрд╛рдЗрд▓рд░реНрд╕рдЪреНрдпрд╛ рд░реВрдкрд╛рдд рдкреНрд░рддрд┐рдмрд┐рдВрдм рдЬрддрди рдХрд░реВ рд╢рдХрддрд╛, рдЬреЗ рдирдВрддрд░ "рдЬрд▓рдж" рддрд░реНрдХ рдкреНрд░рджрд╛рди рдХрд░реЗрд▓. рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рддреБрдореНрд╣реА рдкрд░рд╛рд╡рд░реНрддрдирд╛рдЪреА рд▓рд╡рдЪрд┐рдХрддрд╛ рдЖрдгрд┐ рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рдирдЪреА рдЧрддреА рджреЛрдиреНрд╣реА рд░рд╛рдЦреВ рд╢рдХрддрд╛.

рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЛрдб рдпреЗрдереЗ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ. рдХреЛрдгреАрд╣реА рдорд╛рдЭреЗ рд╢рдмреНрдж рджреЛрдирджрд╛ рддрдкрд╛рд╕реВ рд╢рдХрддреЛ:
HabraReflection Tests

PS: рдЪрд╛рдЪрдгреНрдпрд╛рдВрдордзреАрд▓ рдХреЛрдб IoC рд╡рд╛рдкрд░рддреЛ рдЖрдгрд┐ рдмреЗрдВрдЪрдорд╛рд░реНрдХрдордзреНрдпреЗ рддреЛ рд╕реНрдкрд╖реНрдЯ рд░рдЪрдирд╛ рд╡рд╛рдкрд░рддреЛ. рд╡рд╕реНрддреБрд╕реНрдерд┐рддреА рдЕрд╢реА рдЖрд╣реЗ рдХреА рдЕрдВрддрд┐рдо рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдордзреНрдпреЗ рдореА рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдгрд╛рд░реЗ рдЖрдгрд┐ рдкрд░рд┐рдгрд╛рдо рдЧреЛрдВрдЧрд╛рдЯ рдХрд░рдгрд╛рд░реЗ рд╕рд░реНрд╡ рдШрдЯрдХ рдХрд╛рдкрд▓реЗ.

PPS: рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреЗ рдЖрднрд╛рд░ рджрд┐рдорд┐рддреНрд░реА рдЯрд┐рдЦреЛрдиреЛрд╡ @0x1000000 Moq рд╕реЗрдЯ рдХрд░рддрд╛рдирд╛ рдорд╛рдЭреА рддреНрд░реБрдЯреА рд╢реЛрдзрд▓реНрдпрд╛рдмрджреНрджрд▓, рдЬреНрдпрд╛рдиреЗ рдкреНрд░рдердо рдореЛрдЬрдорд╛рдк рдкреНрд░рднрд╛рд╡рд┐рдд рдХреЗрд▓реЗ. рд╡рд╛рдЪрдХрд╛рдВрдкреИрдХреА рдХреЛрдгрд╛рдХрдбреЗ рдкреБрд░реЗрд╕реЗ рдХрд░реНрдо рдЕрд╕реЗрд▓ рддрд░ рдХреГрдкрдпрд╛ рд▓рд╛рдИрдХ рдХрд░рд╛. рдорд╛рдгреВрд╕ рдерд╛рдВрдмрд▓рд╛, рдорд╛рдгреВрд╕ рд╡рд╛рдЪрд▓рд╛, рддреНрдпрд╛ рдорд╛рдгрд╕рд╛рдиреЗ рджреЛрдирджрд╛ рддрдкрд╛рд╕рд▓реЗ рдЖрдгрд┐ рдЪреВрдХ рдирд┐рджрд░реНрд╢рдирд╛рд╕ рдЖрдгреВрди рджрд┐рд▓реА. рдорд▓рд╛ рд╡рд╛рдЯрддреЗ рдХреА рд╣реЗ рдЖрджрд░ рдЖрдгрд┐ рд╕рд╣рд╛рдиреБрднреВрддреА рдкрд╛рддреНрд░ рдЖрд╣реЗ.

PPPS: рд╢реИрд▓реА рдЖрдгрд┐ рдбрд┐рдЭрд╛рдЗрдирдЪреНрдпрд╛ рддрд│рд╛рдкрд░реНрдпрдВрдд рдкреЛрд╣реЛрдЪрд▓реЗрд▓реНрдпрд╛ рд╕реВрдХреНрд╖реНрдо рд╡рд╛рдЪрдХрд╛рдЪреЗ рдЖрднрд╛рд░. рдореА рдПрдХрд░реВрдкрддрд╛ рдЖрдгрд┐ рд╕реЛрдпреАрд╕рд╛рдареА рдЖрд╣реЗ. рд╕рд╛рджрд░реАрдХрд░рдгрд╛рддреАрд▓ рдореБрддреНрд╕рджреНрджреАрдкрдгрд╛ рдЦреВрдк рдХрд╛рд╣реА рд╣рд╡реЗ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдореА рдЯреАрдХрд╛ рд▓рдХреНрд╖рд╛рдд рдШреЗрддрд▓реА. рдореА рдЕрд╕реНрддреНрд░ рдорд╛рдЧрддреЛ.

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛