рд▓реЗрдЦрд╛рдЪреЗ рд╢реАрд░реНрд╖рдХ рдореА рд▓рдЧреЗрдЪ рд╕рдордЬрд╛рд╡реВрди рд╕рд╛рдВрдЧрддреЛ. рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛, рдореА рдПрдХрд╛ рд╕рд╛рдзреНрдпрд╛ рдкрдг рд╡рд╛рд╕реНрддрд╡рд╡рд╛рджреА рдЙрджрд╛рд╣рд░рдгрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдкрд░рд╛рд╡рд░реНрддрдирд╛рдЪрд╛ рд╡реЗрдЧ рд╡рд╛рдврд╡рдгреНрдпрд╛рд╕рд╛рдареА рдЪрд╛рдВрдЧрд▓рд╛, рд╡рд┐рд╢реНрд╡рд╛рд╕рд╛рд░реНрд╣ рд╕рд▓реНрд▓рд╛ рджреЗрдгреНрдпрд╛рдЪреА рдпреЛрдЬрдирд╛ рдЖрдЦрд▓реА рд╣реЛрддреА. рддрдерд╛рдкрд┐, рдмреЗрдВрдЪрдорд╛рд░реНрдХрд┐рдВрдЧ рджрд░рдореНрдпрд╛рди, рдЕрд╕реЗ рджрд┐рд╕реВрди рдЖрд▓реЗ рдХреА рдкрд░рд╛рд╡рд░реНрддрди рдореА рд╡рд┐рдЪрд╛рд░ рдХреЗрд▓рд╛ рд╣реЛрддрд╛ рддрд┐рддрдХрд╛ рдордВрдж рдирд╡реНрд╣рддрд╛ рдЖрдгрд┐ LINQ рдорд╛рдЭреНрдпрд╛ рдХрд▓реНрдкрдиреЗрдкреЗрдХреНрд╖рд╛ рдордВрдж рд╣реЛрддрд╛. рдЖрдгрд┐ рдЕрд╕реЗ рджрд┐рд╕реВрди рдЖрд▓реЗ рдХреА рдореА рдореЛрдЬрдорд╛рдкрд╛рдЪреА рдЪреВрдХ рджреЗрдЦреАрд▓ рдХреЗрд▓реА рд╣реЛрддреА... рдпрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рдирд╛рддреАрд▓ рдХрдереЗрдЪреЗ рддрдкрд╢реАрд▓ рдХрдЯрдЪреНрдпрд╛ рдЦрд╛рд▓реА рдЖрдгрд┐ рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрдордзреНрдпреЗ рдЖрд╣реЗрдд. рдЙрджрд╛рд╣рд░рдг рдмрд░реЗрдЪ рд╕рд╛рдорд╛рдиреНрдп рдЕрд╕рд▓реНрдпрд╛рдиреЗ рдЖрдгрд┐ рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЭрдордзреНрдпреЗ рдХреЗрд▓реЗ рдЬрд╛рддреЗ рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рдЕрдВрдорд▓рд╛рдд рдЖрдгрд▓реЗ рдЬрд╛рдд рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рдорд╛рдЭреНрдпрд╛ рдорддреЗ рддреЗ рдПрдХ рдордиреЛрд░рдВрдЬрдХ рдкреНрд░рд╛рддреНрдпрдХреНрд╖рд┐рдХ рдард░рд▓реЗ: рдмрд╛рд╣реНрдп рддрд░реНрдХрд╛рдореБрд│реЗ рд▓реЗрдЦрд╛рдЪреНрдпрд╛ рдореБрдЦреНрдп рд╡рд┐рд╖рдпрд╛рдЪреНрдпрд╛ рдХрд╛рдордЧрд┐рд░реАрд╡рд░ рд╣реЛрдгрд╛рд░рд╛ рдкрд░рд┐рдгрд╛рдо рд▓рдХреНрд╖рд╛рдд рдпреЗрдгреНрдпрд╛рд╕рд╛рд░рдЦрд╛ рдирд╡реНрд╣рддрд╛: Moq, Autofac, EF Core рдЖрдгрд┐ рдЗрддрд░ "рдмрд╛рдЗрдВрдбрд┐рдВрдЧреНрдЬ".
рдпрд╛ рд▓реЗрдЦрд╛рдЪреНрдпрд╛ рдкреНрд░рднрд╛рд╡рд╛рдЦрд╛рд▓реА рдореА рдХрд╛рдо рдХрд░рд╛рдпрд▓рд╛ рд╕реБрд░реБрд╡рд╛рдд рдХреЗрд▓реА:
рддреБрдореНрд╣реА рдмрдШреВ рд╢рдХрддрд╛ рдХреА, рд▓реЗрдЦрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рдирд╛рд▓рд╛ рд▓рдХреНрд╖рдгреАрдпрд░реАрддреНрдпрд╛ рдЧрддреА рджреЗрдгреНрдпрд╛рд╕рд╛рдареА рдереЗрдЯ рдкрд░рд╛рд╡рд░реНрддрди рдкреНрд░рдХрд╛рд░ рдкрджреНрдзрддреАрдВрдХрдбреЗ рдЬрд╛рдгреНрдпрд╛рдРрд╡рдЬреА рд╕рдВрдХрд▓рд┐рдд рдкреНрд░рддрд┐рдирд┐рдзреАрдВрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░рдгреНрдпрд╛рдЪрд╛ рд╕рд▓реНрд▓рд╛ рджреЗрддрд╛рдд. рдЕрд░реНрдерд╛рдд, IL рдЙрддреНрд╕рд░реНрдЬрди рджреЗрдЦреАрд▓ рдЖрд╣реЗ, рдкрд░рдВрддреБ рддреЗ рдЯрд╛рд│рдгреЗ рдЪрд╛рдВрдЧрд▓реЗ рдЖрд╣реЗ, рдХрд╛рд░рдг рддреЗ рдХрд╛рд░реНрдп рдкреВрд░реНрдг рдХрд░рдгреНрдпрд╛рдЪрд╛ рд╕рд░реНрд╡рд╛рдд рд╢реНрд░рдо-рдХреЗрдВрджреНрд░рд┐рдд рдЖрдгрд┐ рддреНрд░реБрдЯреА-рдкреНрд░рд╡рдг рдорд╛рд░реНрдЧ рдЖрд╣реЗ.
рдкрд░рд╛рд╡рд░реНрддрдирд╛рдЪреНрдпрд╛ рдЧрддреАрдмрджреНрджрд▓ рдорд╛рдЭреЗ рдиреЗрд╣рдореАрдЪ рдЕрд╕реЗрдЪ рдордд рдЖрд╣реЗ рд╣реЗ рд▓рдХреНрд╖рд╛рдд рдШреЗрддрд╛, рд▓реЗрдЦрдХрд╛рдЪреНрдпрд╛ рдирд┐рд╖реНрдХрд░реНрд╖рд╛рдВрд╡рд░ рдкреНрд░рд╢реНрдирдЪрд┐рдиреНрд╣ рдЙрдкрд╕реНрдерд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдорд╛рдЭрд╛ рд╣реЗрддреВ рдирд╡реНрд╣рддрд╛.
рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЭрдордзреНрдпреЗ рдорд▓рд╛ рдЕрдиреЗрдХрджрд╛ рд░рд┐рдлреНрд▓реЗрдХреНрд╢рдирдЪреЗ рд╕рд╛рдзреЗ рд╡рд╛рдкрд░ рдЖрдврд│рддрд╛рдд. рдПрдХ рдкреНрд░рдХрд╛рд░ рдШреЗрддрд▓рд╛ рдЬрд╛рддреЛ. рдкреНрд░реЙрдкрд░реНрдЯреА рдорд╛рд╣рд┐рддреА рдорд┐рд│рд╡рд▓реА рдЬрд╛рддреЗ. рд╕реЗрдЯрд╡реНрд╣реЕрд▓реНрдпреВ рдкрджреНрдзрдд рдХреЙрд▓ рдХреЗрд▓реА рдЬрд╛рддреЗ рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХрдЬрдг рдЖрдирдВрджреА рдЕрд╕рддреЛ. рд╡реНрд╣реЕрд▓реНрдпреВ рд▓рдХреНрд╖реНрдп рдХреНрд╖реЗрддреНрд░рд╛рдд рдЖрд▓реА рдЖрд╣реЗ, рдкреНрд░рддреНрдпреЗрдХрдЬрдг рдЖрдирдВрджреА рдЖрд╣реЗ. рд╣реБрд╢рд╛рд░ рд▓реЛрдХ - рд╡рд░рд┐рд╖реНрда рдЖрдгрд┐ рдЯреАрдо рд▓реАрдбреНрд╕ - рдпрд╛ рд╕рд╛рдзреНрдпрд╛ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрд╡рд░ рдПрдХрд╛ рдкреНрд░рдХрд╛рд░рд╛рддреВрди рджреБрд╕рд▒реНрдпрд╛ рдкреНрд░рдХрд╛рд░рд╛рдд рддреНрдпрд╛рдВрдЪреНрдпрд╛ "рдпреБрдирд┐рд╡реНрд╣рд░реНрд╕рд▓" рдореЕрдкрд░рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреНрдпрд╛рдВрдЪреЗ рд╕реНрд╡рддрдГрдЪреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд▓рд┐рд╣рд┐рддрд╛рдд. рд╕рд╛рд░рд╛рдВрд╢ рд╕рд╣рд╕рд╛ рдЕрд╕рд╛ рдЕрд╕рддреЛ: рд╕рд░реНрд╡ рдлреАрд▓реНрдб рдШреНрдпрд╛, рд╕рд░реНрд╡ рдЧреБрдгрдзрд░реНрдо рдШреНрдпрд╛, рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╡рд░ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдХрд░рд╛: рдЬрд░ рдкреНрд░рдХрд╛рд░ рд╕рджрд╕реНрдпрд╛рдВрдЪреА рдирд╛рд╡реЗ рдЬреБрд│рдд рдЕрд╕рддреАрд▓, рддрд░ рдЖрдореНрд╣реА рд╕реЗрдЯрд╡реНрд╣реЕрд▓реНрдпреВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддреЛ. рдЬреЗрд╡реНрд╣рд╛ рдПрдЦрд╛рджреНрдпрд╛ рдкреНрд░рдХрд╛рд░рд╛рд╕рд╛рдареА рдорд╛рд▓рдорддреНрддрд╛ рд╕рд╛рдкрдбрдд рдирд╛рд╣реА рддреЗрд╡реНрд╣рд╛ рдЖрдореНрд╣реА рд╡реЗрд│реЛрд╡реЗрд│реА рдЕрдкрд╡рд╛рдж рдкрдХрдбрддреЛ, рдкрд░рдВрддреБ рдпреЗрдереЗ рджреЗрдЦреАрд▓ рдХрд╛рдордЧрд┐рд░реА рд╕реБрдзрд╛рд░рдгреНрдпрд╛рдЪрд╛ рдПрдХ рдорд╛рд░реНрдЧ рдЖрд╣реЗ: рдкреНрд░рдпрддреНрди рдХрд░рд╛/рдкрдХрдбрдгреЗ.
рдореА рд▓реЛрдХрд╛рдВрдирд╛ рдкрд╛рд░реНрд╕рд░ рдЖрдгрд┐ рдореЕрдкрд░реНрд╕ рдкреБрдиреНрд╣рд╛ рд╢реЛрдзрддрд╛рдирд╛ рдкрд╛рд╣рд┐рд▓реЗ рдЖрд╣реЗ, рддреНрдпрд╛рдВрдирд╛ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдЖрдзреА рд╢реЛрдзрд▓реЗрд▓реНрдпрд╛ рдЪрд╛рдХреЗ рдХрд╢реА рдХрд╛рдо рдХрд░рддрд╛рдд рдпрд╛рдЪреА рдкреВрд░реНрдг рдорд╛рд╣рд┐рддреА рдирд╕рддрд╛рдирд╛рд╣реА. рдореА рд▓реЛрдХрд╛рдВрдирд╛ рддреНрдпрд╛рдВрдЪреЗ рднреЛрд│реЗ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдзреЛрд░рдгреЗ, рдЗрдВрдЯрд░рдлреЗрд╕ рдЖрдгрд┐ рдЗрдВрдЬреЗрдХреНрд╢рдиреНрд╕рдЪреНрдпрд╛ рдорд╛рдЧреЗ рд▓рдкрд╡рддрд╛рдирд╛ рдкрд╛рд╣рд┐рд▓реЗ рдЖрд╣реЗ, рдЬрдгреВ рдХрд╛рд╣реА рддреНрдпрд╛рдореБрд│реЗ рдирдВрддрд░рдЪреНрдпрд╛ рдЧреЛрдВрдзрд│рд╛рдЪреЗ рдирд┐рдорд┐рддреНрдд рд╣реЛрдИрд▓. рдореА рдЕрд╢рд╛ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдВрдХрдбреЗ рджреБрд░реНрд▓рдХреНрд╖ рдХреЗрд▓реЗ. рдЦрд░рдВ рддрд░, рдореА рдкреНрд░рддреНрдпрдХреНрд╖ рдХрд╛рдордЧрд┐рд░реАрдЪрд╛ рдбреНрд░реЗрди рдореЛрдЬрд▓рд╛ рдирд╛рд╣реА рдЖрдгрд┐ рдЬреЗрд╡реНрд╣рд╛ рд╢рдХреНрдп рдЕрд╕реЗрд▓ рддреЗрд╡реНрд╣рд╛ рдореА рдлрдХреНрдд рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪреА рдЬрд╛рдЧрд╛ рдЕрдзрд┐рдХ "рдЗрд╖реНрдЯрддрдо" рдореЛрдЬрдгреНрдпрд╛рд╕рд╛рдареА рдШреЗрддрд▓реА. рдореНрд╣рдгреВрди рдЦрд╛рд▓реА рдЪрд░реНрдЪрд╛ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕реБрд░реБрд╡рд╛рддреАрдЪреНрдпрд╛ рдореЛрдЬрдорд╛рдкрд╛рдВрдиреА рдорд▓рд╛ рдЧрдВрднреАрд░рдкрдгреЗ рдЧреЛрдВрдзрд│рд╛рдд рдЯрд╛рдХрд▓реЗ.
рдорд▓рд╛ рд╡рд╛рдЯрддрдВ рддреБрдордЪреНрдпрд╛рдкреИрдХреА рдмрд░реЗрдЪ рдЬрдг, рд░рд┐рдХреНрдЯрд░ рдХрд┐рдВрд╡рд╛ рдЗрддрд░ рд╡рд┐рдЪрд╛рд░рд╡рдВрддрд╛рдВрдЪреЗ рдкреБрд╕реНрддрдХ рд╡рд╛рдЪрддрд╛рдирд╛, рдкреВрд░реНрдгрдкрдгреЗ рдпреЛрдЧреНрдп рд╡рд┐рдзрд╛рдирд╛рд▓рд╛ рд╕рд╛рдореЛрд░реЗ рдЧреЗрд▓реЗ рдЕрд╕рддреАрд▓ рдХреА рдХреЛрдбрдордзреНрдпреЗ рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╣реА рдПрдХ рдЕрд╢реА рдШрдЯрдирд╛ рдЖрд╣реЗ рдЬреА рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдЪреНрдпрд╛ рдХрд╛рдордЧрд┐рд░реАрд╡рд░ рдЕрддреНрдпрдВрдд рдирдХрд╛рд░рд╛рддреНрдордХ рдкрд░рд┐рдгрд╛рдо рдХрд░рддреЗ.
рдХреЙрд▓рд┐рдВрдЧ рд░рд┐рдлреНрд▓реЗрдХреНрд╢рдирдореБрд│реЗ CLR рд▓рд╛ рдпреЛрдЧреНрдп рдЕрд╕реЗрдВрдмреНрд▓реА рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА, рддреНрдпрд╛рдВрдЪрд╛ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЖрдгрдгреНрдпрд╛рд╕рд╛рдареА, рддреНрдпрд╛рдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдЕрд╕реЗрдЪ рдХрд╛рд╣реА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрд╕реЗрдВрдмреНрд▓реАрдордзреВрди рдЬрд╛рд╡реЗ рд▓рд╛рдЧрддреЗ. рд╢рд┐рд╡рд╛рдп, рд╕реАрдХреНрд╡реЗрдиреНрд╕ рдЯреНрд░реЕрд╡реНрд╣рд░реНрд╕рд▓ рджрд░рдореНрдпрд╛рди рд░рд┐рдлреНрд▓реЗрдХреНрд╢рдирдореБрд│реЗ рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рдореЗрдорд░реА рд╡рд╛рдЯрдк рд╣реЛрддреЗ. рдЖрдкрдг рдореЗрдорд░реА рд╡рд╛рдкрд░рддреЛ, CLR GC рдЕрдирдкреЕрдХ рдХрд░рддреЛ рдЖрдгрд┐ рддреНрдпрд╛рдореБрд│реЗ рдлреНрд░реАрдЬ рдХрд░рддреЛ. рдорд╛рдЭреНрдпрд╛рд╡рд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдареЗрд╡рд╛, рд╣реЗ рд▓рдХреНрд╖рдгреАрдпрд░реАрддреНрдпрд╛ рдордВрдж рдЕрд╕рд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ. рдЖрдзреБрдирд┐рдХ рдЙрддреНрдкрд╛рджрди рд╕рд░реНрд╡реНрд╣рд░ рдХрд┐рдВрд╡рд╛ рдХреНрд▓рд╛рдЙрдб рдорд╢реАрдирдордзреНрдпреЗ рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рдореЗрдорд░реА рдЙрдЪреНрдЪ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡рд┐рд▓рдВрдмрд╛рдВрдирд╛ рд░реЛрдЦрдд рдирд╛рд╣реА. рдЦрд░рдВ рддрд░, рддреБрдордЪреНрдпрд╛рдХрдбреЗ рдЬрд┐рддрдХреА рдЬрд╛рд╕реНрдд рдореЗрдорд░реА рдЕрд╕реЗрд▓ рддрд┐рддрдХреА рддреБрдореНрд╣рд╛рд▓рд╛ 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;
}
рдпреЗрдереЗ рдЖрдкрдг рддрд╛рдмрдбрддреЛрдм рдЧреБрдгрдзрд░реНрдорд╛рдВрдирд╛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рддреЛ рдЖрдгрд┐ рдереЗрдЯ SetValue рд▓рд╛ рдХреЙрд▓ рдХрд░рддреЛ.
рд╕реНрдкрд╖реНрдЯрддреЗрд╕рд╛рдареА рдЖрдгрд┐ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдореНрд╣рдгреВрди, рдореА рдПрдХ рд╕рд╛рдзреА рдкрджреНрдзрдд рд▓рд╛рдЧреВ рдХреЗрд▓реА рдЬреА рддреНрдпрд╛рдВрдЪреНрдпрд╛ рд╕рд╣рд╕рдВрдмрдВрдз рдЬреЛрдбреНрдпрд╛рдВрдЪреА рдореВрд▓реНрдпреЗ рдереЗрдЯ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреНрд╖реЗрддреНрд░рд╛рдВрдордзреНрдпреЗ рд▓рд┐рд╣рд┐рддреЗ. рдЙрдкрд╕рд░реНрдЧ рдореЕрдиреНрдпреБрдЕрд▓ рдЖрд╣реЗ.
рдЖрддрд╛ рдмреЗрдВрдЪрдорд╛рд░реНрдХрдбреЙрдЯрдиреЗрдЯ рдШреЗрдК рдЖрдгрд┐ рддреНрдпрд╛рдЪреА рдХрд╛рдордЧрд┐рд░реА рддрдкрд╛рд╕реВ. рдЖрдгрд┐ рдЕрдЪрд╛рдирдХ... (рд╕реНрдкреЙрдпрд▓рд░ рдЕрд▓рд░реНрдЯ: рд╣рд╛ рдЪреБрдХреАрдЪрд╛ рдирд┐рдХрд╛рд▓ рдЖрд╣реЗ; рддрдкрд╢реАрд▓ рдЦрд╛рд▓реА рджрд┐рд▓реЗ рдЖрд╣реЗрдд)

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

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