рдмрд╣реБрдд рд╕рдордп рдкрд╣рд▓реЗ рдирд╣реАрдВ, рдПрдХ
рд▓реЗрдЦ (рд╡рд┐рд╖рдп рд╕реЗ
рд▓рд┐рдВрдХ ) рдореЗрд░реЗ рд╕рд╣рдпреЛрдЧреА
рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ рдмрд┐рдпрдВрдбрдпреВ рджреНрд╡рд╛рд░рд╛ рд╣реИрдмреЗ рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ QueryFactory рдмрдВрдбрд▓ + рдХреНрд╡реЗрд░реА рдХреНрд╡реЗрд░реА рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рджреВрд░ рдЬрд╛рдиреЗ рдХрд╛ рд╡рд░реНрдгрди рдерд╛ред рдЙрд╕реА рд╕рдордп, рд▓реЗрдЦ рдореЗрдВ рджрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рдХреА рдЙрдкрдпреБрдХреНрддрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рджрд┐рд▓рдЪрд╕реНрдк рдмрд╣рд╕ рдЫрд┐рдбрд╝ рдЧрдИред рдХрд╛рдлреА рджрд┐рд▓рдЪрд╕реНрдк рд╕рдореАрдХреНрд╖рд╛рдПрдВ рдереАрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ, рдХрдерди, QueryFactory рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдмреЛрдЭ рд╣реИ рдЬреЛ рджрд░реНрдж рд░рд╣рд┐рдд рдЬреЛрдбрд╝, рд╕рдВрд╢реЛрдзрди рдФрд░ рдХреНрд╡реЗрд░реА рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдореЗрдВ рдмрд╛рдзрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдереЗред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдЖрдкрдХреЛ IoT рдХрдВрдЯреЗрдирд░ рдХреЗ рд╕рдХреНрд░рд┐рдп рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ QueryFactory рдХреЗ рдЖрд╡реЗрджрди рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рдордиреЗ рдЕрдкрдиреА рд╣рд╛рд▓рд┐рдпрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдХреНрд╡реЗрд░реА рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЗ рдЗрд╕ рд╕рдВрдЧрдарди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ рдЬрд╣рд╛рдВ рдХреИрд╕рд▓.рдЗрдВрдбрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ IoC рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╡рд┐рд╡рд░рдг
рдЗрд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╡рд░реНрдгрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдирд┐рд╣рд┐рдд рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред рдЗрд╕рдХрд╛ рд╕рд╛рд░ рдХрд░реАрдм рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рдХ рдпрд╣ рдХреИрд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЕрддрд┐рднрд╛рд░рд┐рдд рд╡рд┐рдзрд┐ рдХрд╛ рдХреМрди рд╕рд╛ рд╕рдВрд╕реНрдХрд░рдг рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН, рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рджреНрд╡рд╛рд░рд╛ рдкрд╣рдЪрд╛рдиред рдФрд░ рдЕрдЧрд░, рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рдЖрджреЗрд╢, рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реНрдХ рд╣реИрдВ, рддреЛ рдпрджрд┐ рдЖрдИрдУрд╕реА рдХрдВрдЯреЗрдирд░ рд╕реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рддреЛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдЬреЗрдиреЗрд░рд┐рдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕реЗрдЯ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдореЗрдВ рдХреБрдЫ рдЕрдВрддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕реЗрдЯ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рдореИрдВ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреА рдЙрдкрд░реЛрдХреНрдд рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВред
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдФрд░ рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреЛ рджреЗрдЦрдиреЗ рдкрд░ рд╕рдмрдХреБрдЫ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рднреА рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп IQuery <,> рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ:
public interface IQuery< in TCriterion, out TResult>
where TCriterion : ICriterion
{
TResult Execute(TCriterion criterion);
}
* This source code was highlighted with Source Code Highlighter .
рддрджрдиреБрд╕рд╛рд░, рдЗрд╕рдХрд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ ICriterion рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреНред рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬрд┐рд╕рдореЗрдВ рдХреНрд╡реЗрд░реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ (рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЬрд╣рд╛рдВ рдлрд┐рд▓реНрдЯрд░ рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рд╣реЛрддреА рд╣реИ), рд╕рд╛рде рд╣реА рд╕рд╛рде рд▓реМрдЯреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдкреНрд░рдХрд╛рд░ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ IQuery рдХрд╛ рдПрдХ рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ, рддреЛ> рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЬреЗрдиреЗрд░рд┐рдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдлрд╝реЗрд╕ TCriterion рдФрд░ TResult, рдЗрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЬрд╛рдирдХрд░ рдЖрдк рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдиреАрдЪреЗ WindsorInstaller рд╡рд░реНрдЧ рдХрд╛ рдХреЛрдб рд╣реИ рдЬреЛ рдПрдХ Io рдХрдВрдЯреЗрдирд░ рдореЗрдВ IQuery <,> рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИред
public class WindsorInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
var queries = AllTypes.FromAssemblyNamed( "Domain.NHibernate" )
.BasedOn( typeof (IQuery<,>))
.WithService.FirstInterface()
.Configure(x => x.LifeStyle.Transient);
container.Register(queries);
}
}
* This source code was highlighted with Source Code Highlighter .
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдореЗрдВ IQuery <,> рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдбреЛрдореЗрди рдХреЗ рд╕рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдорд┐рд▓рддреЗ рд╣реИрдВред рдЙрдирдХреЗ рд╕рд╛рде рдЕрд╕реЗрдВрдмрд▓реА рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рдкрд╣рд▓реЗ рдкреНрд░рдХрд╛рд░ (рдЬреЛ, рдлрд┐рд░ рд╕реЗ, IQuery <,> рд╣реИ) рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд░реВрдк рдореЗрдВ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВред
рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрд░реЛрдз рдХреЗ рдЖрдЧреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдпрд╛, рдХрд╣рддреЗ рд╣реИрдВ, рдкреНрд░рдкрддреНрд░ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ, рдПрдХ рдЫреЛрдЯрд╛ рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧ рд▓рд┐рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рддрд╛рдХрд┐ рдЖрдк рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд░реЛрдз рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдХреНрд╖рдорддрд╛рдУрдВ рдФрд░ рддрдВрддреНрд░ рдХреЗ рдкреНрд░рдХрдЯрди (рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП) рдХреЛ рд╕рдордЭ рд╕рдХреЗрдВред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдмреБрд▓рд╛рдУ рд╕реВрдЪреА 1ред
var account = Query.For<Account>().With( new LoginCriterion(login));
* This source code was highlighted with Source Code Highlighter .
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдореЗрдВ рдЗрд╕рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕реЗ рдПрдХ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЦрд╛рддрд╛ рдЗрдХрд╛рдИ рдХреЛ рд▓реМрдЯрд╛рдП, рдФрд░ рдЗрд╕ рдЦрд╛рддреЗ рдХреЗ рд▓реЙрдЧрд┐рди рд╕реЗ рдЦреЛрдЬ рдХрд░реЗрдВред рд▓реЙрдЧрд┐рди LoginCriterion рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЛ рдЕрдзрд┐рдХ рдкрд╛рд░рджрд░реНрд╢реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдиреБрд░реЛрдз рдХреЛрдб рдХреЛ рдЙрджреНрдзреГрдд рдХрд░рддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╕рд╛рде рд╣реА рд╕рд╛рде рд▓реЙрдЧрд┐рди рдХреНрд░рд┐рдЯреЗрд░рд┐рдпрди рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдХреЛрдбред
public class FindAccountByLoginQuery : LinqQueryBase<Account>, IQuery<LoginCriterion, Account>
{
public FindAccountByLoginQuery(ILinqProvider linqProvider)
: base (linqProvider)
{
}
public Account Execute(LoginCriterion criterion)
{
return Query()
.SingleOrDefault(x => x.Login.ToLower() == criterion.Login.ToLower());
}
}
public class LoginCriterion : ICriterion
{
public LoginCriterion( string login)
{
Login = login;
}
public string Login { get ; set ; }
}
* This source code was highlighted with Source Code Highlighter .
рдЕрдм, рд╕рд╣рд╛рдпрдХ рдХреЛрдб рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдЗрд╕реЗ рджреЛ рдЗрдВрдЯрд░рдлреЗрд╕ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
public interface IQueryBuilder
{
IQueryFor<TResult> For<TResult>();
}
public interface IQueryFor< out T>
{
T With<TCriterion>(TCriterion criterion) where TCriterion : ICriterion;
T ById( int id);
IEnumerable <T> All();
}
* This source code was highlighted with Source Code Highlighter .
... рдФрд░ рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
public class QueryBuilder : IQueryBuilder
{
private readonly IDependencyResolver dependencyResolver;
public QueryBuilder(IDependencyResolver dependencyResolver)
{
this .dependencyResolver = dependencyResolver;
}
public IQueryFor<TResult> For<TResult>()
{
return new QueryFor<TResult>(dependencyResolver);
}
#region Nested type: QueryFor
private class QueryFor<TResult> : IQueryFor<TResult>
{
private readonly IDependencyResolver dependencyResolver;
public QueryFor(IDependencyResolver dependencyResolver)
{
this .dependencyResolver = dependencyResolver;
}
public TResult With<TCriterion>(TCriterion criterion) where TCriterion : ICriterion
{
return dependencyResolver.GetService<IQuery<TCriterion, TResult>>().Execute(criterion);
}
public TResult ById( int id)
{
return dependencyResolver.GetService<IFindByIdQuery<TResult>>().Execute( new IdCriterion(id));
}
public IEnumerable <TResult> All()
{
return dependencyResolver.GetService<IFindAllQuery<TResult>>().Execute( new EmptyCriterion());
}
}
#endregion
}
* This source code was highlighted with Source Code Highlighter .
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдорд╛рд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЦреБрдж рдХреЛ рдПрдХ рдПрдХрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрдХ рд╕реАрдорд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╣рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреИрд╕реЗ рдХрд┐ ICriterion рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдЬреЛ IQueryBuilder рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдмреЛрдЭ рдХрд░ рджреЗрдЧрд╛ред рд╕рдВрдХреЗрддрд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде, рдХреЗрд╡рд▓ рдЕрдиреБрд░реЛрдз рд╕реЗ рд▓реМрдЯрд╛рдП рдЧрдП рдореВрд▓реНрдп рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреНрд╡реЗрд░реА рдЙрджрд╛рд╣рд░рдг рд╕реАрдзреЗ IoC рдХрдВрдЯреЗрдирд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ QueryFor <> рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЖрдВрддрд░рд┐рдХ ASP.NET MVC3, ID dependencyResolver рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП IoC рдХрдВрдЯреЗрдирд░ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдХрдВрдЯреЗрдирд░ рдХреЗ рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдХреИрд╕рд▓. рд╡рд┐рдВрдбрд╕рд░ рдХреЛ рд╕реМрдВрдк рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
QueryBuilder рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЗрд╕реЗ IQueryBuilder рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд░реВрдк рдореЗрдВ IoC рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╣реИред рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рдХрд╛рд░рдг, рд╕рд╛рде рд╣реА рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд╕рднреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП ASP.NET MVC3 рдореЗрдВ рд▓рд╛рдЧреВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рддрдВрддреНрд░, рдЬрд┐рдирдХреЗ рдкреНрд░рдХрд╛рд░ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рд╣реИрдВ, рдпрджрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдЙрджрд╛рд╣рд░рдг рд╕реНрд╡рдпрдВ рдХрдВрдЯреЗрдирд░ рд╕реЗ рднреА рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдирд┐рдореНрди рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рд╕рд╛рд░ рдЙрджрд╛рд╣рд░рдг, UnitOfWork рдЙрджреНрдШрд╛рдЯрди рдХреЛрдб рдЫреЛрдбрд╝реЗ рдЧрдП)ред
public class AccountController : Controller
{
public IQueryBuilder Query { get ; set ; }
public ActionResult Index( string login)
{
var account = Query.For<Account>().With( new LoginCriterion(login));
// -
}
}
* This source code was highlighted with Source Code Highlighter .
рдирд┐рд╖реНрдХрд░реНрд╖
рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣рдореЗрдВ рди рдХреЗрд╡рд▓ QueryFactory рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдХреНрд╡реЗрд░реА рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рджрд░реНрджрд░рд╣рд┐рдд рдмрдирд╛рдиреЗ, рдмрджрд▓рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╣рдореЗрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрд┐рд╕реА рдХреНрд╡реЗрд░реА рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдореИрдВ рднреА "рд╡рд╛рд╕реНрддрд╡рд┐рдХ" рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рддрдВрддреНрд░ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ рджреЛ рдкреНрд░рдореБрдЦ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреЛ CQS рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреНрд╡реЗрд░реА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ: рдпреЗ рдЗрдирдкреБрдЯ рдЪрдпрди рдорд╛рдирджрдВрдб рдФрд░ рд░рд┐рдЯрд░реНрди рдкрд░рд┐рдгрд╛рдо рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ ICriterion рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛрдб рдХреЛ "рдЕрд╡реНрдпрд╡рд╕реНрдерд╛" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХреЗрд╡рд▓ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЕрдиреНрдп рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рдЗрдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВ рдФрд░ / рдпрд╛ рдЙрдирдХреА рд░рдЪрдирд╛ рдЕрдХреНрд╕рд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдЕрдзреАрди рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯреАрдореЗрдВ (CQS рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ) рд╕рдорд╛рди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддреА рд╣реИрдВред
рдореИрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫреА рдЪрд░реНрдЪрд╛ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд░рдЪрдирд╛рддреНрдордХ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреЗ рд▓рд┐рдП рддрддреНрдкрд░ рд╣реВрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрддрдиреА рдФрд░ рд╡рд┐рд░рд╛рдо рдЪрд┐рд╣реНрди рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЙрдиреНрд╣реЗрдВ рдирд┐рдЬреА рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд┐рдЦреЗрдВред