рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рд╣рдорд╛рд░реА рдХрдВрдкрдиреА рдХреЗ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдбреАрдЯреАрдУ рдирд┐рд░реНрдорд╛рдг рддрдВрддреНрд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдБрдЧрд╛ред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рд╕рд░реНрд╡рд░ рднрд╛рдЧ рдФрд░ рдХрдИ рдХреНрд▓рд╛рдЗрдВрдЯ (рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ, рдЖрдЙрдЯрд▓реБрдХ, рдЖрдИрдкреИрдб) рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд╕рд░реНрд╡рд░ WCF рдкрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╕реЗрд╡рд╛рдУрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИред рдЪреВрдВрдХрд┐ рд╕реЗрд╡рд╛рдПрдВ рд╣реИрдВ, рдЖрдкрдХреЛ рдЙрдирдХреЗ рд╕рд╛рде рдХреБрдЫ рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡рд┐рдХрд▓реНрдк, рдЬрдм рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдбреЛрдореЗрди рдбреЛрдореЗрди рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рддреБрд░рдВрдд рдЧрд╛рдпрдм рд╣реЛ рдЧрдпрд╛ рд╣реИ:
- рд╕рднреА рдХреНрд▓рд╛рдЗрдВрдЯ .NET рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред
- рдЬрдЯрд┐рд▓ рд╡рд╕реНрддреБ рд░реЗрдЦрд╛рдВрдХрди рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рдХреНрд░рдорд╛рдВрдХрди рд╕рдорд╕реНрдпрд╛рдПрдВ
- рдбреЗрдЯрд╛ рдЕрддрд┐рд░реЗрдХ
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпреЗ рд╕рднреА рдХрдорд┐рдпрд╛рдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЬреНрдЮрд╛рдд рд╣реИрдВ, рдФрд░ рд╕реНрдорд╛рд░реНрдЯ рд▓реЛрдЧ рдЙрдиреНрд╣реЗрдВ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдСрдмреНрдЬреЗрдХреНрдЯ (рдбреАрдЯреАрдУ) рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рдЖрдП рдереЗред рдЕрд░реНрдерд╛рддреН, рдбреЛрдореЗрди рдбреЛрдореЗрди рдЗрдХрд╛рдИ рд╡рд░реНрдЧ рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдбреАрдЯреАрдУ рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рджреВрд╕рд░реЛрдВ рдХреЗ рдмреАрдЪ, рдбреАрдЯреАрдУ рдмрдирд╛рдиреЗ рдФрд░ рдЙрдирдореЗрдВ рд╕рдВрд╕реНрдерд╛рдУрдВ рд╕реЗ рдбреЗрдЯрд╛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреЗ рд╕рд╡рд╛рд▓ рд╣реИрдВред рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ, = рдСрдкрд░реЗрдЯрд░ рдЗрд╕ рдХрд╛рдо рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди, рдЬрдм рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЖрдХрд╛рд░ рдмрдврд╝рдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреЛрдб рд╡реГрджреНрдзрд┐ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ, рддреЛ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реЗ рд╕рдорд╛рдзрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдмрдврд╝ рдЬрд╛рддреА рд╣реИред рдиреАрдЪреЗ рдореИрдВ рдЙрд╕ рддрдВрддреНрд░ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдбреАрдЯреАрдУ рдмрдирд╛рдиреЗ рдФрд░ рдЖрдмрд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред
рдбреЛрдореЗрди рдореЙрдбрд▓ рдЙрджрд╛рд╣рд░рдг
рдЕрдзрд┐рдХ рдЪрд┐рддреНрд░рдг рдЪрд┐рддреНрд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдкрд░реАрдХреНрд╖рдг рдбреЛрдореЗрди рдореЙрдбрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди рдЙрд▓реНрдХрд╛рдкрд┐рдВрдбреЛрдВ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдореБрдЦреНрдп рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:
рд╕рдВрдмрдВрдзрд┐рдд рдбреЛрдореЗрди рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рдбреАрдЯреАрдУ рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рддреЗ рд╣реИрдВред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╣рдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдлреНрд▓реИрдЯ рдбреАрдЯреАрдУ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рддрдВрддреНрд░ рд╕рдВрдЦреНрдпрд╛ 1 - рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдПрдХ рдЗрдХрд╛рдИ, рдлрд┐рд░ рдЗрдХрд╛рдИ рд╕реЗ рдбреАрдЯреАрдУ
рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣реБрдЖ
interface IDtoMapper<TEntity, TDto> { IEnumerable<TDto> Map(IEnumerable<TEntity> entities); }
рдкреНрд░рддреНрдпреЗрдХ рдЗрдХрд╛рдИ-рдбреАрдЯреАрдУ рдЬреЛрдбрд╝реА рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдкрд┐рдВрдЧ рдХреЛ
рдСрдЯреЛрдореИрдкрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдиреЗ рд╣рдореЗрдВ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЗ рдирд┐рдпрдорд┐рдд рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдФрд░ рдХреЗрд╡рд▓ рдЙрди рдорд╛рдорд▓реЛрдВ рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЬрдм рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХрд╛ рдирд╛рдо рдСрдЯреЛрдореИрдкрд░ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рдордЭреМрддреЗ рдХреЗ рддрд╣рдд рдирд╣реАрдВ рдЖрдпрд╛ рдерд╛ред рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛:
- рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдПрдХ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП WCF рдСрдкрд░реЗрд╢рди рдХрд╣рддрд╛ рд╣реИ
- рдХреБрдЫ рдорд╛рдирджрдВрдбреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ IDtoMapper рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
- IDtoMapper DTO рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рд╕рдВрд╕реНрдерд╛рдУрдВ рд╕реЗ DTO рдХреЗ рдбреЗрдЯрд╛ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддрд╛ рд╣реИред
- рдПрдХ DTO рд╕рдВрдЧреНрд░рд╣ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рддрдВрддреНрд░ рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдФрд░ рд╣рдо рддрдм рддрдХ рдХрд╛рдлреА рдЦреБрд╢ рдереЗ, рдЬрдм рдмрдврд╝рддреЗ рднрд╛рд░ рдХреЗ рд╕рд╛рде, рдкреНрд░рджрд░реНрд╢рди рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рджрд┐рдЦрд╛рдИ рджреАрдВред рдорд╛рдкреЛрдВ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рджреЛрд╖рд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкреБрд░рд╛рдиреЗ IDtoMapper рдерд╛ред (рд╣рдордиреЗ рдЙрд╕реЗ рдбрд╛рдВрдЯрд╛ рдирд╣реАрдВ, рдХреНрдпреЛрдВрдХрд┐ рдПрдЬрд╛рдЗрд▓ рдХреА рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдкрд░рдВрдкрд░рд╛рдУрдВ рдореЗрдВ рдЙрд╕рдиреЗ рдЙрддреНрдкрд╛рдж рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдореБрдХреНрдд рдХрд░рдиреЗ, рдХрд╛рдо рдХреЗ рджреМрд░рд╛рди рдЗрд╕реЗ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдФрд░ рдлрд┐рд░ рдкреНрд░рд╛рдкреНрдд рдЕрдиреБрднрд╡ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдХреАред) рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдереА рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓рд╛ рдЧрдпрд╛ рдерд╛ред рдбреАрдЯреАрдУ рдореЗрдВ рднрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдШреЛрдВ рдФрд░ рдПрдХрддреНрд░реАрдХрд░рдг рдиреЗ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЬреБрдбрд╝рд╛рд╡ рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдиреЗ рд╕рд┐рд╕реНрдЯрдо рдХреА рдЧрддрд┐ рдХреЛ рдирдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ред
рд╣рдордиреЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 2 рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛: рдбреЗрдЯрд╛ рдирд┐рд╖реНрдХрд░реНрд╖рдг рд░рдгрдиреАрддрд┐рдпреЛрдВ (рдЖрд▓рд╕реА рдпрд╛ рдЙрддреНрд╕реБрдХ рд▓реЛрдбрд┐рдВрдЧ, рдЖрджрд┐) рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди, рдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд╕реАрдзреЗ рдбреАрдЯреАрдУ рдирд┐рдХрд╛рд▓реЗрдВред рджреВрд╕рд░рд╛ рд░рд╛рд╕реНрддрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓, рдЙрддреНрдкрд╛рджрдХ рдФрд░ рд▓рдЪреАрд▓рд╛ рдЪреБрдирд╛ рдЧрдпрд╛ред рдпрд╣рд╛рдБ рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдо NHibernate рдХрд╛ рдЙрдкрдпреЛрдЧ ORM рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреНрд╡реЗрд░реАрдЬрд╝ LINQ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рднреА рднреА рдЗрдХрд╛рдИ рдврд╛рдВрдЪреЗ рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред
рддрдВрддреНрд░ рд╕рдВрдЦреНрдпрд╛ 2 - рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбреАрдЯреАрдУ
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛:
interface IDtoFetcher<TEntity, TDto> { IEnumerable<TDto> Fetch(IQueryable<TEntity> query, Paging paging, FetchAim fetchAim); }
рдЕрдм рд╡рд┐рдзрд┐ рдПрдХ рдХреЗ рдмрдЬрд╛рдп 3 рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ:
- рдХреНрд╡реЗрд░реА - рдЗрдХрд╛рдИ рдкреНрд░рдХрд╛рд░ рд╕реЗ LINQ рдХреНрд╡реЗрд░реА
- рдкреЗрдЬрд┐рдВрдЧ - рдирд┐рдХрд╛рд▓реЗ рдЧрдП рдкреГрд╖реНрда рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА
- fetchAim - рдирд┐рд╖реНрдХрд░реНрд╖рдг рд▓рдХреНрд╖реНрдп
рдЪреВрдВрдХрд┐ рдбреАрдЯреАрдУ рдореИрдкрд┐рдВрдЧ рддрдВрддреНрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдПрдХ рд╕рд╛рде рдХрдИ рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖рдг рд▓рдХреНрд╖реНрдп рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдереАред рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП, рдбреАрдЯреАрдУ рдХреЗ рдкрд╛рд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЧреБрдг рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА рд╕реЗ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдирд╛рдо рдФрд░ рдПрдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╛рда рдЧреБрдг рд╕реЗрдЯ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдХрд╛рд░реНрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдлрд╝реЙрдЪ рд╡рд┐рдзрд┐ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИ рдЬреЛ рдбреАрдЯреАрдУ рдирд┐рд╖реНрдХрд░реНрд╖рдг рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░, рддрджрдиреБрд╕рд╛рд░, рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдб рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдЕрдореВрд░реНрддрди рдХреА рдкрд╣рдЪрд╛рди, рдпрд╣ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдмрд╛рд░реА рдереАред SQL рдореЗрдВ рдЪреБрдирд┐рдВрджрд╛ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЗ рд▓рд┐рдП, рдкреНрд░рдХреНрд╖реЗрдкрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
SELECT (id, name) FROM meteors
LINQ рдореЗрдВ, рдЕрдиреБрдорд╛рдиреЛрдВ рдХрд╛ рдЪрдпрди () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирд┐рдореНрди LINQ рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп рдЙрдкрд░реЛрдХреНрдд SQL рдХреНрд╡реЗрд░реА рдЙрддреНрдкрдиреНрди рд╣реЛрдЧреА:
IQueryable<Meteor> meteorQuery = _meteorRepository.Query(); IEnumerable<MeteorDto> meteors = meteorQuery .Select(m => new MeteorDto { Id = m.Id, Name = m.Name }) .ToList();
рдЗрд╕ LINQ рдХреНрд╖рдорддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ IDtoFetcher рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдбрд╝реА рдореЗрд╣рдирдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛:
class SpaceMeteorDtoFetcher: IDtoFetcher<SpaceMeteor, SpaceMeteorDto> { public IEnumerable<SpaceMeteorDto> Fetch(IQueryable<SpaceMeteor> query, Page page, FetchAim fetchAim) { if (fetchAim == FetchAim.Index) { return query .Select(m => new SpaceMeteorDto { Id = m.Id, Name = m.Name }) .Page(page) .ToList(); } else if (fetchAim == FetchAim.List) {
рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рд╢реНрд░реЗрдгреА рдХреЗ рдмрд╛рдж рдЖрд▓рд╕реНрдп рдХрд╛ рдЕрдЪрд╛рдирдХ рд╣рдорд▓рд╛ рд╣реБрдЖ (рдФрд░ рдпрд╣ рдЕрд╣рд╕рд╛рд╕ рдХрд┐ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдХреЛрдб рдХреЗ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рджреЛрд╣рд░рд╛рд╡ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдФрд░ рдирдИ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝реЗрдЧрд╛)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХреЗ рд╡рд╛рд░рд┐рд╕реЛрдВ рдХреА рдореИрдкрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп, рдЙрди рд╕рднреА рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдЧреБрдгреЛрдВ рдХреЗ рдЖрд░рдВрдн рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рднрд┐рдиреНрди рдирд┐рд╖реНрдХрд░реНрд╖рдг рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдХрд╛рдИ рдХреА рдореИрдкрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп рджреЛрд╣рд░рд╛рд╡ рд╣реЛрдЧрд╛ред рдФрд░ рдлрд┐рд░ рд╕рд░рд▓ рд░реВрд╕реА рд╢рдмреНрдж рдореЗрд░реЗ рд╕рд┐рд░ рдореЗрдВ рдЕрдЪрд╛рдирдХ рдЙрддреНрдкрдиреНрди рд╣реБрдП:
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдкреЗрдбрд╝ ...
рдЪреВрдВрдХрд┐ LINQ рдХреНрд╡реЗрд░реА рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЯреНрд░реА рд╣реИ, рдЬрд┐рд╕реЗ рддрдм рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ SQL рдХреНрд╡реЗрд░реА рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ, рдпрд╣ рдПрдХ рдШреЛрд╖рдгрд╛рддреНрдордХ рддрдВрддреНрд░ рдмрдирд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рд╣рдореЗрдВ рдбреАрдЯреАрдУ рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрдХрд╛рдИ рдЧреБрдгреЛрдВ рдХреА рдореИрдкрд┐рдВрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдФрд░ рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рд╕реЗ рдЖрд╡рд╢реНрдпрдХ LINQ рдХреНрд╡реЗрд░реА рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб (.NET 4.0, NHibernate 3.3.2, рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2012)
рдпрд╣рд╛рдБ рд╣реИ ред
рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╣рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдкреЗрдбрд╝реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд╕рдорд╛рди рд╕рдВрдШрд░реНрд╖ рдореЗрдВ рдХреНрдпреЛрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдирд╛ рдерд╛, рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ рдХрд┐ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рднреНрд░реВрдг рдХрд╛ рд╡рд┐рдиреНрдпрд╛рд╕ рдЕрдм рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдорд╛рдирдЪрд┐рддреНрд░рдг рдЕрдореВрд░реНрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рднреНрд░реВрдг рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
public interface IFetchMap<TSource, TTarget> where TSource : Entity where TTarget : BaseDto {
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИ: рд╣рдо рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рд╖реНрдХрд░реНрд╖рдг рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдореИрдкрд┐рдВрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдк рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХреМрди рд╕реЗ рдЧреБрдг рд▓реЛрдб рдХрд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдПред CustomMap рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╡рд╣рд╛рдВ рдкрд╛рд░рд┐рдд рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдореЗрдВ, рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдирд┐рдХрд╛рд▓реЗ рдЧрдП DTO рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
DTO рдЙрд▓реНрдХрд╛рдкрд┐рдВрдб рдХрд╛ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ Fetcher BaseMeteorDtoFetcher рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХреЗ рдЧреБрдгреЛрдВ рдХреА рдореИрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ - рдЗрд╕ рддрд░рд╣ рд╣рдо рджреЛрд╣рд░рд╛рд╡ рд╕реЗ рдмрдЪрддреЗ рд╣реИрдВ рдФрд░ рдирдП рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрд▓реНрдХрд╛рдкрд┐рдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рднреНрд░реВрдг рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдЧрддрд┐ рджреЗрддреЗ рд╣реИрдВред BaseMeteorDtoFetcher рд╕реНрд╡рдпрдВ, рдмрджрд▓реЗ рдореЗрдВ, BaseDtoFetcher рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ, рдЬреЛ рдХрд┐ IFetchMap рдкреНрд░рдХрд╛рд░ рдХреА рдмрдирд╛рдИ рдЧрдИ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ DTO рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдПрдХ рдирдпрд╛ рдЕрдореВрд░реНрдд рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдФрд░, рд╕реНрдерд╛рдкрд┐рдд рдкрд░рдВрдкрд░рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╣рдореЗрдВ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬреАрд╡рди рдореЗрдВ рдпрд╣ рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рдерд╛ - рдкрд╣рд▓реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдЧ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдФрд░ рдлрд┐рд░ рдЙрд╕рдореЗрдВ рд╕реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд┐рдХрд╛рд▓рд╛ рдЧрдпрд╛ред) рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди FetchMap рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдЙрд╕ рдореЗрдВ рд╣реИ рдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдкреЗрдбрд╝ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдкреВрд░рд╛ рддрд░реНрдХ рд╕реНрдерд┐рдд рд╣реИред рд▓реЗрдЦ рдХрд╛рдлреА рдмрдбрд╝рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рдореИрдВ рд╕реНрдЯреЗрдк рдмрд╛рдп рд╕реНрдЯреЗрдк рдлреЗрдЯрдЪрдк рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред рдЖрдк рдЗрд╕реЗ
рд╕рдВрд▓рдЧреНрди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдкреЗрдбрд╝ рдХреА рдХреБрдЫ рд╕рдордЭ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЗрд╕ рд╕рдордп рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдРрд╕рд╛ рддрдВрддреНрд░ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбреАрдЯреАрдУ рдХреЗ рдЗрд╖реНрдЯрддрдо рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдореИрдкрд┐рдВрдЧ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рдШреЛрд╖рдгрд╛рддреНрдордХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ, рдЬреЛ рдЙрдирдХреА рд░рдЪрдирд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдирдИ рд╕рдВрд╕реНрдерд╛рдУрдВ рдФрд░ рдбреАрдЯреАрдУ рдХреЗ рд▓рд┐рдП рдЧрддрд┐ рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕реВрдЯ рдХрд░рддрд╛ рд╣реИред
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдЕрдиреБрднрд╡ рдХреБрдЫ рдкрд╛рдардХреЛрдВ рдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рджреМрд░рд╛рди рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдПрдХрддреНрд░ рдХрд┐рдП рдЧрдП рд░реЗрдХ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдФрд░ рдЕрдЧрд░ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдЖрд╕рд╛рди рдФрд░ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирдХрд░ рдЦреБрд╢реА рд╣реЛрдЧреАред рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!