
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реЛрдЧрд╛ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдореВрд▓ рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рдШреБрдЯрдиреЛрдВ рдкрд░ рдмрдиреЗ рдереЗред рддрднреА, рдПрдХ рд╕рдлрд▓ рд╢реВрдЯрд┐рдВрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд░рдгрдиреАрддрд┐рдХ рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЗ рдЙрдЪрд┐рдд рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдФрд░ рд╕рдордЭ рдХреЗ рд╕рд╛рде, рд╕рдВрд╕рд╛рдзрди рдХреЗ рдорд╛рд▓рд┐рдХ рдореМрдЬреВрджрд╛ рдЙрддреНрдкрд╛рдж рдХреЛ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рдареАрдХ рд╣реИ, рдЕрдЧрд░ рдпрд╣ рдмреНрд░реВрд╕ рдмреИрдирд░ рдХреЗ рдПрдХ рд╣рд▓реНрдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдкрд╣рд▓реЗ рд╣реБрдЖ рдерд╛ред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдРрд╕рд╛ рдХреНрд╖рдг рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдпрд╛рдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рд╕рдВрд╕рд╛рдзрди рдПрдХ рд╡рд┐рд╢рд╛рд▓ рд╣рд░рд╛ рдЦрд░рд╛рдм рдирд┐рдпрдВрддреНрд░рд┐рдд рд╡рд┐рд╢рд╛рд▓рдХрд╛рдп рд╣реИ? рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреНрдпрд╛ рдХрд░реЗрдВ?
рдкрд╣рд▓рд╛ рдирд┐рд░реНрдгрдп рдЬреЛ рдорди рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд╡рд╣ рд╕рдм рдХреБрдЫ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реИ, рдХрд╛рдВрдЦ рдХреЗ рдиреАрдЪреЗ рдлрд╛рдЙрд▓рд░ рдФрд░ GOFA рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдкрдХрдбрд╝рдирд╛ред рд╡рд╣рд╛рдБ рд╣реИ, рд▓реЗрдХрд┐рди: рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рджреВрд╕рд░рд╛ рд╕рдорд╛рдзрд╛рди, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдзрд┐рдХ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ, рдореИрд╕реЗрдбреЛрди рдХреЗ рд╕рд┐рдХрдВрджрд░ рдХреЛ рдЫреЛрдЯреЗ рдХрджрдореЛрдВ рд╕реЗ рдЕрдкрдорд╛рдирд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдЕрднреА рднреА рдЧреЙрд░реНрдбрд┐рдпрди рдиреЙрдЯ рдХреЛ рд╕реБрд▓рдЭрд╛рдирд╛ рд╣реИред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдПрдХ рдмрд╣реБрдд рднреНрд░рд╛рдордХ рд╕рдорд╛рдзрд╛рди рдХреЛ рдПрдХ рдЖрд╡реЗрджрди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдкрд░рддреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рд▓реЗрдЦ рдореЗрдВ рджрд░реНрд╢рд╛рдП рдЧрдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдорд╛рдореВрд▓реА рд╕рд░рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд╡реЗ рдореВрд▓ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВред рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдХрд╣рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд▓реЗрдЦрдХ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдХреЛрдб рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрдХреЗрддрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдорд╛рдирддрд╛ рд╣реИред рдпрд╣ рднреА рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╕рдорд╛рдзрд╛рди ASP.NET рдореЗрдВ Webforms рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред
рддреЛ, рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рд╣рдорд╛рд░реЗ рдиреГрддреНрдп:
рдкрд╣рд▓рд╛ рдЖрдВрдХрдбрд╝рд╛ рднреНрд░рдорд┐рдд рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рдЬреЛ рд╣рдореЗрдВ рдирд┐рдкрдЯрдиреА рдереА, рд╡рд╣ рдереА DAL рдХреЛрдб рдХреЗ рд╕рд╛рде html рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдХреЛрдб рдХреА рдЙрд▓рдЭрдиред рдпрд╣ рд╣реИ рдХрд┐, UserControl рдХреЗ рдЕрдВрджрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕реНрдХреНрд░рд┐рдмрд▓ рдХрд╛рдлреА рдмрд╛рд░ рдорд┐рд▓реЗ:
StringBuilder content = new StringBuilder(); var persons = Database.Persons.GetListBySchool(school); foreach(var person in persons) { content.AppendFormat(@тАЭ<p>{0}</p>тАЭ, person.Name); }
рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдХрд┐рд╕реА рднреА рдмрджрд▓рд╛рд╡ рдХрд╛ рд╕рдкрдирд╛ рджреЗрдЦрдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред рдФрд░ рдореИрдВ рдЗрд╕ рдХреЛрдб рдХреЛ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рдЪреБрдк рд░рд╣рддрд╛ рд╣реВрдВред рдЬрд▓реНрдж рд╣реА рдореИрдВрдиреЗ рдПрдХ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЬреЛ рдЖрдкрдХреЛ UI рдФрд░ DAL рдХреЗ рдмреАрдЪ рдХреЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдЬрд▓реНрджреА рдФрд░ рджрд░реНрдж рд░рд╣рд┐рдд рд░реВрдк рд╕реЗ рддреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
public interface ICommand { void Execute(); }
public abstract class Command<T> : ICommand { public T Result { get; protected set; } public abstract void Execute(); }
public interface ICommandExecutor { T Run<T>(Command<T> command); }
рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХреА рдкреНрд░рддреНрдпреЗрдХ рдЗрдХрд╛рдИ, рдЬрд┐рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдПрдХ рдЕрд▓рдЧ рдЯреАрдо рдмрди рдЧрдИ рд╣реИ, рдФрд░ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИ:
public class GetListBySchool: Command<List<DbPerson>> { public DbSchool School { get; set; } public override void Execute() { this.Result = Database.Persons.GetListBySchool(this.School); } }
рдФрд░ рдпрд╣рд╛рдБ ICommandExecutor рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ:
public T Run<T>(Command<T> command) { command.Execute(); return command.Result; }
рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рдЕрдВрджрд░ рдХреЛрдб рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛:
private readonly ICommandExecutor executor; public SchoolView(ICommandExecutor executor) { if (executor == null) { throw new ArgumentNullException("executor"); } this.executor = executor; } public string GetPersonsHtmlList() { StringBuilder content = new StringBuilder(); var persons = this.executor.Run(new GetListBySchool { School = school }); foreach(var person in persons) { content.AppendFormat(@тАЭ<p>{0}</p>тАЭ, person.Name); }
рд╕рдм рдХреБрдЫ рдареАрдХ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рднреА рдбрд╛рдпрд░реЗрдХреНрдЯ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЙрд▓ рдХреЛ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдкрд░рд┐рдгрд╛рдореА рдЕрдкрдбреЗрдЯреЗрдб рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рднреА рдЕрд╕рдВрднрд╡ рдерд╛ред рдФрд░ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИрдВред
рдбреАрдмрд░реНрд╕рди рд╡рд░реНрдЧ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рддрд░реНрдХ рдФрд░ рдЧреБрдг рд╢рд╛рдорд┐рд▓ рдереЗ рдЬрд┐рдирдореЗрдВ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реЗрдЯрд░ рдирд╣реАрдВ рдерд╛ред рдкрд╣рд▓реЗ рдХреБрдЫ рдЧреБрдгреЛрдВ рдХреЛ
рд╡рд░реНрдЪреБрдЕрд▓ рдФрд░ рд▓реЙрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рддреАрд╕рд░реА рд╕рдВрдкрддреНрддрд┐ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдереА рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ
рдирд┐рдЬреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдерд╛ - рдпрд╣ рдПрдХ рдареЛрдХрд░ рдмрди рдЧрдпрд╛ред рдЙрд╕ рд╕рдордп, рдХрд┐рд╕реА рдиреЗ рдЕрдкрдиреА рдореБрдЯреНрдареА рдХреЗ рд╕рд╛рде рдореЗрдЬ рдкрд░ рджрд╕реНрддрдХ рджреА рдФрд░ рдХрд╣рд╛ рдХрд┐, рдЪреВрдВрдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕реЗ рдмреИрд╕рд╛рдЦреА рдХреЗ рдмрд┐рдирд╛ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕ рджрд┐рд╢рд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЖрднрд╛рд╕реА рдЪрд┐рд╣реНрдирд┐рдд рдЧреБрдг рд░реАрд╕реЗрдЯ рдХрд┐рдП рдЧрдП рдереЗ, рдФрд░ рдорд╕реНрддрд┐рд╖реНрдХ рджреВрд╕рд░реЗ рд╡рд┐рдХрд▓реНрдк рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдорд╛рдзрд╛рди рд╢реБрд░реВ рдореЗрдВ рд╕рддрд╣ рдкрд░ рдерд╛, рдмрд╕ рдХрд┐рд╕реА рдХреЛ рднреА рдЗрд╕реЗ рдЖрд╡рд╛рдЬ рджреЗрдиреЗ рдХреА рд╣рд┐рдореНрдордд рдирд╣реАрдВ рдереА, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рдердХрд╛рдК рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ред рдФрд░ рд╕рдорд╛рдзрд╛рди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
рдбреАрдЯреАрдУ ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ UserControls рдХреЗ рдЕрдВрджрд░ рд╣рдо рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ DAL рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рдкреНрд░рддрд┐рдпрд╛рдБ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓реЙрдЬрд┐рдХ рдХреЗ, рдкрдмреНрд▓рд┐рдХ рдЧреЗрдЯрд░реНрд╕ рдФрд░ рд╕реЗрдЯрд░реНрд╕ рдХреЗ рд╕рд╛рдеред рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рд╕рдВрднрд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕ рдмрдирд╛рдПред рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЯреАрдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдиреЗ рд▓рдЧреА:
public class GetListBySchool: Command<List<Person>> { public long SchoolId { get; set; } public override void Execute() { var dbSchool = DataBase.Instance.GetSchoolById(this.SchoolId); this.Result = dbSchool.Network.Memberships .GetListBySchool(this.School) .Select(person => person.Convert()) .ToList(); } }
рдЕрдм рд╣рдорд╛рд░реА
GetPersonsHtmlList рдкрджреНрдзрддрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдпреЛрдЧреНрдп рд╣реЛ рдЧрдИ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛
рдЙрддреНрдкрдиреНрди рд╣реЛ рдЧрдИ рд╣реИ : UserControl рдХреЗ рдЕрдВрджрд░, рдРрд╕реА рд╡рд┐рдзрд┐ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдирд╣реАрдВ рд╣реИ, рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рд╣реИрдВред рдФрд░ рдЕрдЧрд░ рдкрд╣рд▓реЗ
DbSchool рдСрдмреНрдЬреЗрдХреНрдЯ
рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд▓реЛрдб рдХрд┐рдпрд╛
рдЧрдпрд╛ рдерд╛ , рддреЛ рдЕрдм рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрд▓рдЧ рдХрдорд╛рдВрдб рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣
рдХрдореНрдпреВрдЯ рдлреВрдЯ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ
IContextManager рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрддрд╛ рд╣реИ
T GetFunctionResult<T>(Func<T> func) where T : class;
рд╣рдордиреЗ
HttpContext.Current рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдпрд╣реА рд╣реИ, рдЕрдЧрд░ рд╡рд┐рдзрд┐ рдХреЛ рдкрд╣рд▓реА рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡рд╕реНрддреБ рдХреЛ рд╕рдВрджрд░реНрдн рдореЗрдВ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╡рд┐рдзрд┐ рдХреЛ рджреВрд╕рд░реА рдпрд╛ рдЕрдзрд┐рдХ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрджрд░реНрдн рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
IContextManager рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
CommandExecutor рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╕рднреА рдХрдорд╛рдВрдбреНрд╕ рдХреЛ рдкрд╛рд╕ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдХрдорд╛рдВрдб рдХреЗ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдПрдХ рдирдИ рдкреНрд░реЙрдкрд░реНрдЯреА рджрд┐рдЦрд╛рдИ рджреА рд╣реИ)ред
public T Run<T>(Command<T> command) { command.Context = this.context; command.Execute(); return command.Result; }
public class GetListBySchool: Command<List<Person>> { public long SchoolId { get; set; } public override void Execute() { var dbSchool = this.Context.GetFunctionResult(() => DataBase.Instance.GetSchoolById(this.SchoolId)); this.Result = dbSchool.Network.Memberships .GetListBySchool(this.School) .Select(person => person.Convert()) .ToList(); } }
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдХрдо рд▓рд╛рдЧрдд рдкрд░, рд╣рдо UI рдкрд░рдд рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗред рдФрд░, рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рдкрд░рдд рдХреЛ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╡рд░ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИред рд╡реНрдпрд╛рдкрд╛рд░рд┐рдХ рддрд░реНрдХ рдХреА рдПрдХ рдкрд░рдд рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХреБрдЫ рдиреЛрдЯ рднреА рдорд┐рд▓реЗред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрджреЗрд╢реЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ, рдЙрдиреНрд╣реЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдЦрд░реЛрдВрдЪ рд╕реЗ рдПрдХ рд╕рдХреНрд╖рдо рд░рдЪрдирд╛ рдкрд░ рд╕реЛрдЪрдиреЗ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдЖрд╕рд╛рди рд╣реИред
рджреВрд╕рд░рд╛ рдЖрдВрдХрдбрд╝рд╛ рд╕реНрдкрд╖реНрдЯ рд╣реИред
рдЕрдЧрд▓рд╛ рдХрд╛рд░реНрдп Request.Params рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдирд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╕рд╡рд╛рд▓ рдирд╣реАрдВ рдерд╛, рдФрд░ рд╕рдорд╛рдзрд╛рди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдерд╛:
public interface IParametersReader { string GetRequestValue(string key); }
public class RequestParametersReader : IParametersReader { private readonly HttpContextBase context; public RequestParametersReader(HttpContextBase context) { if (context == null) { throw new ArgumentNullException("context"); } this.context = context; } public string GetRequestValue(string key) { return this.context.Request[key]; } }
рддреАрд╕рд░рд╛ рдЖрдВрдХрдбрд╝рд╛ рд╣рд╡рд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдорддреМрд░ рдкрд░ рд╣реЛрддрд╛ рд╣реИ, рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рдПрдХ UserControl рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдИ рдХрд╛ред рдЙрди рд╕рднреА рдХреЛ рд╕рдорд╛рди рд╡рд╕реНрддреБрдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: рдмрдЪреНрдЪреЗ рдореЗрдВ UserControl, рдПрдХ рд╡рд┐рдзрд┐ рдмрдирд╛рдИ рдЧрдИ рд╣реИ
void Bind(DbSchool school, DbPerson person) { this.school = school; this.person = person; }
рдлрд┐рд░ рд╡рд┐рдзрд┐ рдХреЛ рдкреЗрд░реЗрдВрдЯ рдпреВрдЬрд░рдХрдВрдЯреНрд░реЛрд▓ рд╕реЗ рдкреБрдХрд╛рд░рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдм рдХреБрдЫ рдЕрджреНрднреБрдд рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд┐рд░реНрдгрдп рдХрд╛ рдЕрд╕реНрддрд┐рддреНрд╡ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдордд рднреВрд▓реЛ: рдЬрдм рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рдШреЛрдВрд╕рд▓рд╛ рджреЛ рд╕реНрддрд░реЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЧрд▓рддрд┐рдпрд╛рдВ рдХрд░рдиреЗ рдпрд╛ рд╡рд╛рдВрдЫрд┐рдд рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреВрд▓рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрд╛рдлреА рдмрдврд╝ рдЬрд╛рддреА рд╣реИред рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдордиреЗ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдЕрд╕реНрд╡реАрдХреГрддрд┐ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдЗрд╕рдХрд╛ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдкреВрд░реНрд╡ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реНрд░реЛрдд рд╕реЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИ рдЬрд┐рд╕реЗ рдХреЛрдИ рднреА рдлрд┐рд░ рд╕реЗ рднрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рджреЛ рд╡рд░реНрдЧ рдмрдирд╛рдП рдЧрдП:
public class InAttribute : Attribute { public string Name { get; set; } }
рдФрд░
public class OutAttribute : Attribute { public string Name { get; set; } }
рдЬрд┐рди рдЧреБрдгреЛрдВ рдХреЛ рд╣рд╡рд╛ рдореЗрдВ рд▓рдЯрдХрд╛рдП рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдЖрдЙрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрд┐рди рдЧреБрдгреЛрдВ рдХреЛ рдЗрд╕ рд╣рд╡рд╛ рд╕реЗ рднрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрдиреНрд╣реЗрдВ рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рджреНрд╡рд╛рд░рд╛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдХреЗрд╡рд▓ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХрд╛ рд╡рд┐рд╖рдп рд╣реИред рд╣рдордиреЗ рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ System.Web.UI.UserControl рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЬреЛрдбрд╝реЗ рдЧрдП рд╣реИрдВ:
protected override void OnLoad(EventArgs e) {
рдЙрдкрд╕рдВрд╣рд╛рд░:
рдпрд╣ рд╣рдорд╛рд░реЗ
рд╣рд░реЗ рд░рд╛рдХреНрд╖рд╕ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЙрддреНрдкрд╛рдж рдХреЛ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдкрд╣рд▓рд╛ рдЪрд░рдг рдерд╛ред рд╣рдорд╛рд░реЗ рдХрд╛рдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдерд╛:
1. рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде UserControls рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╡рд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред
2. рдпреВрдЖрдИ рдкрд░рдд рдХрд╛ рд╕рдм рдХреБрдЫ рд╕реЗ рдЕрд▓рдЧ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЬреБрджрд╛рдИред
3. рдиреЗрд╕реНрдЯреЗрдб UserContol-s рдХреЗ рдмреАрдЪ рддрдВрдЧ рдмрдВрдзрди рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ред
4. рдХреЛрдб рдкрдардиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ред
5. рдиреИрддрд┐рдХ рдкреАрдбрд╝рд╛ рдФрд░ рд╡рд┐рд╡реЗрдХ рдХреА рд╢реБрджреНрдзрд┐ рдореЗрдВ рдХрдореА;)
рд▓реЗрдЦ рдХреЗ рд▓реЗрдЦрдХ: рд╡рд┐рдЯрд╛рд▓реА рд▓реЗрдмреЗрджреЗрд╡, рдЕрдЧреНрд░рдгреА рдбреЗрд╡рд▓рдкрд░ рдбрд╛рдпрд░реА