рдкрд░рд┐рдЪрдп
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдШрдЯрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрдЯрд╛ рдирд┐рд░реНрднрд░рддрд╛ рдкреИрдЯрд░реНрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдореИрдВ C # рднрд╛рд╖рд╛ рдФрд░ рдПрдХрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред
рдЖрдЗрдП рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рдФрд░ рдбреЗрдЯрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдХрд╛рд░реНрдп
рдПрдХ рдШрдЯрдХ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬреЛ рдЯреАрдореЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░,
K
рдХреА рд░реЗрдЯрд┐рдВрдЧ рдХреЛ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдмрдирд╛рддрд╛ рд╣реИред рдЯреАрдореЛрдВ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдЕрдиреНрдп рд░реИрдВрдХрд┐рдВрдЧ рдШрдЯрдХреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдШрдЯрдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдбреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рдЯреАрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ, рд╕рднреА рд░реЗрдВрдЬрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдФрд╕рдд рд▓рд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЯреАрдо:
public interface ITeam { string Name { get; } }
Ranzhirovschik:
public interface IRanker { int Rank(ITeam team); }
рд░реЗрдЯрд┐рдВрдЧ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐:
public interface ITopRecord { ITeam Team { get; } int Position { get; } double AverageRank { get; } }
рдШрдЯрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕:
public interface ITopBuilder { IEnumerable<ITopRecord> BuildTop(IEnumerable<ITeam> teams, int topCount); }
рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдХрдВрдЯреЗрдирд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рдореВрд▓реНрдпрд╛рдВрдХрдХреЛрдВ рдХреЗ рдПрдХ рдЖрджрд┐рдо рдкреНрд░рджрд╛рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ:
public interface IRankerProvider { IEnumerable<IRanker> GetRankers(); }
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдЖрдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░
IRanker
(
IRanker
) рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдореЗрдВ рдЗрдВрдЯрд░рдлреЗрд╕ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╡реЗ рдЕрдкрдирд╛ рдХрд╛рдо рдХрд░реЗрдВред
IRankerProvider
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рдРрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рд░рд╣рддрд╛ рд╣реИ рдЬреЛ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХрд┐рди
ITopRecord
рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдХреЗрд╡рд▓
ITopRecord
рдФрд░
ITopBuilder
ITopRecord
ред рдЖрдк рд░реЗрдВрдЬрд░реЛрдВ рдХрд╛ рдПрдХ рдХрдВрдкреЛрдЬрд┐рдЯ рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдХрд░рддреЗ рд╣реИрдВ, рджреЗрддреЗ рд╣реИрдВ рдФрд░ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВред
рдХреБрдЫ рд╕рдордп рдмрд╛рдж, рдПрдХ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╕рдорд╕реНрдпрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред рд░реИрдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд░реИрдВрдХрд░реНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреБрд▓ рдХрд┐рддрдиреА рдЯреАрдореЗрдВ рд╣реИрдВред рдЖрдорддреМрд░ рдкрд░ рдЗрд╕ рдЬрдЧрд╣ рдкрд░ рд╕рднреА рдирд┐рд░реНрджрдпреА, рдЦрд░рд╛рдм рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдФрд░ рдкрд╕рдВрдж рдХреЛ рдпрд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдХреНрд╕рд░ рдПрдХ рдмрджрд╕реВрд░рдд рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╕рд╣рд╛рд░рд╛ - рд░реЗрдВрдЬрд░ рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП:
public interface IRanker { int Rank(ITeam team,int teamCount); }
рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЕрдиреБрдмрдВрдз рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛, рдЬреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╕рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛ред
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреБрдЫ рдЕрд▓рдЧ рд╕рдорд╛рдзрд╛рди рдкрд╕рдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реИрдВрдХрд░ рдХреЗ рдирд┐рд░реНрдорд╛рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
public interface IRanker { int Rank(ITeam team); } public interface IRankerWithCount { int Rank(ITeam team,int teamCount); }
рдпрд╛ рдЗрд╕реА рддрд░рд╣ рдХреА рдПрдХ рдпреЛрдЬрдирд╛ рдЬреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ
ITopBuilder
рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдПрдХ рдирдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрдиреЗ рдкрд░ рдирд░рдХ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ - рджреВрд╕рд░реЗ рд░реЗрдВрдЬрд░ рдХреЛ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрд╕реЗ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреА рдЬрд╛ рд░рд╣реА рдЯреАрдо рд╕реВрдЪреА рдореЗрдВ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдФрд░ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд░реИрдВрдХрд┐рдВрдЧ рдореЗрдВ рдХрд┐рддрдиреЗ рд▓реЛрдЧ рд╣реЛрдВрдЧреЗред
рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдпрд╣ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдФрд░ рд╕рдмрд╕реЗ рд╕рд╣реА рд╣реИ, рдФрд░
ITopBuilder
рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ
ITopBuilder
:
public interface IRanker { int Rank(ITeam team, IEnumerable<ITeam> teams, int topCount); }
рдЖрдк рдЗрд╕реЗ рд╕рдВрджрд░реНрдн рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдХреЗ, рдФрд░ рд╕рдВрджрд░реНрдн рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╣реЛрддреА рд╣реИ рдЬреЛ рд░реИрдВрдХрд░реНрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рддрдп рд╣реЛрддреЗ рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╢реБрд░реБрдЖрдд рд╕реЗ рд╣реА рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред
рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛
рдпрджреНрдпрдкрд┐ рдКрдкрд░ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╣реИ, рдЗрд╕рдХреА рдПрдХ рдЦрд╛рдореА рд╣реИред рдпрд╣ рдмреЗрдорд╛рдиреА рд╣реИред рд╕рднреА рд░реЗрдВрдЬрд░реЛрдВ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддрдм рднреА рдЬрдм рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЖрдЗрдП рд╕рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рдкрджрдВрдбреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред
рдФрд░, рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрднрд░рддрд╛ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рди рдкреИрдЯрд░реНрди рдФрд░ рдПрдХ рдХрдВрдЯреЗрдирд░ рд╣реИред рдПрдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ
IEnumerable
рдФрд░
Int32
рдЙрджрд╛рд╣рд░рдг
Int32
рдЦрд░рд╛рдм рд╣реИред рдЙрдиреНрд╣реЗрдВ рдЙрдЪрд┐рдд рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рд▓рдкреЗрдЯреЗрдВ:
public interface ITeamCollection:IEnumerable<ITeam> { } public interface ITopCount { int Count { get; } }
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рд░реЗрдВрдЬрд░ рдХреЗ рдХрд╛рдо рдХреЗ рдЙрддреНрдкрд╛рдж рдХреЛ рднреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рд╕реА рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдФрд░ рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ:
public interface ITop : IEnumerable<ITopRecord> { }
рдЕрдм рд╣рдорд╛рд░реЗ
ITopBuilder
рдШрдЯрдХ рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
public interface ITopBuilder { ITop BuildTop(ITeamCollection teams, ITopCount count); }
рд╣рдо рдХрдВрдЯреЗрдирд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдПрдХрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдореБрдЭреЗ рдРрд╕рд╛ рдХреБрдЫ рдорд┐рд▓рддрд╛ рд╣реИ:
public ITop BuildTop(ITeamCollection teams, ITopCount count) { using (var container = _container.CreateChildContainer()) { container.RegisterInstance(teams); container.RegisterInstance(count);
ITeamCollection
рдФрд░
ITopCount
ITeamCollection
рдХреЛ
ITopCount
ITeamCollection
рджреЗрдВред рдФрд░, рдЗрд╕рд▓рд┐рдП, рдХреЛрдб рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐
IRankerProvider
рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ
IRankerProvider
рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ, рдФрд░ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рджрд░реНрдЬ рдХрд░реЗрдВред
BuildTop
рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдмрдирд╛рдИ рдЧрдИ рдХрд┐рд╕реА рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХрд╛рд░реНрдп
BuildTop
рдЖрдк рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
public ITop BuildTop(ITeamCollection teams, ITopCount count) { using (var container = _container.CreateChildContainer()) { container.RegisterInstance(teams); container.RegisterInstance(count); return container.Resolve<BuilerWorker>().DoWork(); } } internal sealed class BuilerWorker { public BuilerWorker( ITeamCollection teams, ITopCount count, IRankerProvider rankerProvider ... ) { } public ITop DoWork() { ... } }
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдордиреЗ рдПрдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдЧрдарди рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдПрдХ рдирд╛рдо рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рд╣реИ - рдбреЗрдЯрд╛ рдирд┐рд░реНрднрд░рддрд╛ред