рдЖрдкрдХрд╛ рджрд┐рди рд╢реБрдн рд╣реЛ!
рдореЙрдбрд▓-рд╡реНрдпреВ-рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдПрдХ рдХрд╛рдлреА рдкреНрд░рд╕рд┐рджреНрдз рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рд╣реИред рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рджрд┐рдЦрддрд╛ рд╣реИ: рдПрдХ рдореЙрдбрд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реНрдХреНрд░реАрди рдХреЗ рд╕рднреА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ; рджреЗрдЦреЗрдВ / рджреЗрдЦреЗрдВ, рдЬреЛ рдХреБрдЫ рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЬрд╛рдирддрд╛ рд╣реИ; рдкреНрд░рддрд┐рдирд┐рдзрд┐ (рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛), рдЬреЛ рд▓рд┐рдВрдХ рд╣реИ - рджреГрд╢реНрдп рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИ, рдореЙрдбрд▓ рдХреЛ рдмрджрд▓ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддред
рдЬрдЯрд┐рд▓рддрд╛ рддрдм рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ рдЬрдм рдХрд┐рд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд░реВрдкреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рдЬрд╛рддреА рд╣реИред
рдпрд╣ рд▓реЗрдЦ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИ:- рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдПрдХ рд╕рд╛;
рд╡рд┐рдВрдбреЛрдЬ рдлреЙрд░реНрдо рдХреЗ рддрд╣рдд рдПрдорд╡реАрдкреА (рдЕрд░реНрдерд╛рддреН рдирд┐рд╖реНрдХреНрд░рд┐рдп рджреГрд╢реНрдп) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдЖрдо рд╕рдорд╕реНрдпрд╛рдПрдВ;
- рд░реВрдкреЛрдВ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг, рдореЛрдбрд▓ рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдХреНрд░рдордг рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ;
- рдПрдХ IoC рдХрдВрдЯреЗрдирд░ рдФрд░ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ - DI рдЯреЗрдореНрдкрд▓реЗрдЯ (рдЕрд░реНрдерд╛рддреН рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЗрдВрдЬреЗрдХреНрд╢рди);
- MVP рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреА рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ (NUnit рдФрд░ NSubstitute рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ);
- рдпрд╣ рд╕рдм рдПрдХ рдорд┐рдиреА-рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╣реЛрдЧрд╛ рдФрд░ рджреГрд╢реНрдп рдмрдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛ред
рд▓реЗрдЦ рдкрд░ рд╕реНрдкрд░реНрд╢:- рдПрдбрд╛рдкреНрдЯрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЖрд╡реЗрджрди;
- рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдирд┐рдпрдВрддреНрд░рдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред
рдпрд╣ рд▓реЗрдЦ рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣реИ?рдЬреНрдпрд╛рджрд╛рддрд░ рд╡рд┐рдВрдбреЛрдЬ рдлреЙрд░реНрдо рдкрд░ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рд╕реБрдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА, рдпрд╛ рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдЕрд╕рдлрд▓ рд░рд╣реЗред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдХреБрдЫ рддрд░рдХреАрдмреЗрдВ WPF рдФрд░ рд╡реЗрдм рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рднреА рд▓рд╛рдЧреВ рд╣реИрдВред
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди
рд╣рдо рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рдЖрддреЗ рд╣реИрдВ - 3 рд╕реНрдХреНрд░реАрди рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
1) рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕реНрдХреНрд░реАрди;
2) рдореБрдЦреНрдп рд╕реНрдХреНрд░реАрди;
3) рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдореЛрдбрд▓ рд╕реНрдХреНрд░реАрдиред
рдЖрдкрдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП:

рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рдмрд┐рдЯ
рдПрдорд╡реАрдкреА, рдЕрдкрдиреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреА рддрд░рд╣, рдПрдорд╡реАрд╕реА (рдореЙрдбрд▓-рд╡реНрдпреВ-рдХрдВрдЯреНрд░реЛрд▓рд░) рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░, рдЖрдк рдПрдорд╡реАрдкреА рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╡рд┐рддрд░рдг рдХреА рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛, рдЙрдиреНрд╣реЗрдВ 3 рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
- рдирд┐рд╖реНрдХреНрд░рд┐рдп рджреГрд╢реНрдп: рджреЗрдЦреЗрдВ рдореЗрдВ рдЖрджрд┐рдо рдбреЗрдЯрд╛ (рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕, рд╕рдВрдЦреНрдпрд╛) рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рддрд░реНрдХ рд╣реЛрддрд╛ рд╣реИ, рдмрд╛рдХреА рд╕рдм рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;
- рдкреНрд░рд╕реНрддреБрддрд┐ рдореЙрдбрд▓: рджреГрд╢реНрдп рдореЗрдВ, рди рдХреЗрд╡рд▓ рдЖрджрд┐рдо рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рднреА;
- рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдирд┐рдпрдВрддреНрд░рдХ: рдореЙрдбрд▓ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреЗрдЦреЗрдВ рдФрд░ рдЙрд╕рд╕реЗ рдбреЗрдЯрд╛ рд▓реЗрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдмрд╛рдж рдирд┐рд╖реНрдХреНрд░рд┐рдп рджреГрд╢реНрдп рдХрд╛ рд╕рдВрд╢реЛрдзрди рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рдо рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ:
- рдкреНрд░рд╕реНрддреБрддрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (IVIV), рдЬреЛ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрдмрдВрдз рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ;
- рдкреНрд░рд╕реНрддреБрддрд┐ рдЖрдИрд╡реАрдИрд╡рд╛рдИ рдХрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ, рдЬреЛ рдЦреБрдж рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рдЪрд╛рд╣реЗ рд╡рд╣ рд╡рд┐рдВрдбреЛрдЬ рдлреЙрд░реНрдо, рдбрдмреНрд▓реНрдпреВрдкреАрдПрдл рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрдВрд╕реЛрд▓ рд╣реЛ) рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпреЗ рд░реВрдк рд╣реИрдВ;
- рдореЙрдбрд▓ - рдХреБрдЫ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг: рдбреЗрдЯрд╛рдмреЗрд╕, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА, рд╕реЗрд╡рд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪ)ред рдЗрд╕реЗ рдПрдХ рд╡рд░реНрдЧ рдпрд╛ рдлрд┐рд░, рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ;
- рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдореЗрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (IVIV) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╕реНрддреБрддрд┐ рдХрд╛ рд▓рд┐рдВрдХ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЗрд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреА рдШрдЯрдирд╛рдУрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддрд╛ рд╣реИ, рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕рддреНрдпрд╛рдкрди (рд╕рддреНрдпрд╛рдкрди) рдХрд░рддрд╛ рд╣реИ; рдЗрд╕рдореЗрдВ рдореЙрдбрд▓ рдпрд╛ рдЗрд╕рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд▓рд┐рдВрдХ рднреА рд╣реИ, рдбреЗрдЯрд╛ рдХреЛ рд╡реНрдпреВ рд╕реЗ рдЗрд╕рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдФрд░ рдЕрдкрдбреЗрдЯ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ред
рдареЗрда рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиpublic class Presenter { private readonly IView _view; private readonly IService _service; public Presenter(IView view, IService service) { _view = view; _service = service; _view.UserIdChanged += () => UpdateUserInfo(); } private void UpdateUserInfo() { var user = _service.GetUser(_view.UserId); _view.Username = user.Username; _view.Age = user.Age; } }
рдПрдХ рдЫреЛрдЯреЗ рд╡рд░реНрдЧ рдХреЗ рдХрдиреЗрдХреНрд╢рди (рдЗрдВрдЯрд░рдлреЗрд╕, рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХреЗ рдХреНрдпрд╛ рдлрд╛рдпрджреЗ рд╣реИрдВ?
1. рдЖрдкрдХреЛ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рднреА рдШрдЯрдХ рдХреЗ рддрд░реНрдХ рдХреЛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
2. рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдорд╣рд╛рди рдЕрд╡рд╕рд░ред рдЯреАрдбреАрдбреА рдкреНрд░рд╢рдВрд╕рдХреЛрдВ рдХреЛ рд░реЛрдорд╛рдВрдЪрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЪрд▓реЛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдУ!
рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдВ?
рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╕рдорд╛рдзрд╛рди рдореЗрдВ 4 рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдБ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреА:
- рдбреЛрдореЗрдирдореЙрдбрд▓ - рдПрдХ рд╢рдмреНрдж рдореЗрдВ рд╕реЗрд╡рд╛рдПрдВ рдФрд░ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ - рдПрдХ рдореЙрдбрд▓;
- рдкреНрд░рд╕реНрддреБрддрд┐ - рдЗрд╕рдореЗрдВ рд╡рд┐рдЬрд╝реБрдЕрд▓ рдкреНрд░реЗрдЬреЗрдВрдЯреЗрд╢рди рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдЬрд┐рдХ рд╣реИ, рдЕрд░реНрдерд╛рдд рд╕рднреА рдкреНрд░рддрд┐рдирд┐рдзрд┐, рдкреНрд░рд╕реНрддреБрддрд┐ рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рдЕрдиреНрдп рдЖрдзрд╛рд░ рд╡рд░реНрдЧ;
- рдпреВрдЖрдИ - рд╡рд┐рдВрдбреЛрдЬ рдлреЙрд░реНрдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХреЗрд╡рд▓ рдлреЙрд░реНрдо (рдкреНрд░реЗрдЬреЗрдВрдЯреЗрд╢рди рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди) рдФрд░ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд▓реЙрдЬрд┐рдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ;
- рдЯреЗрд╕реНрдЯ - рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдгред
рдореЗрди () рдореЗрдВ рдХреНрдпрд╛ рд▓рд┐рдЦрдирд╛ рд╣реИ?
Windows рдкреНрд░рдкрддреНрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХрд╛ рдорд╛рдирдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
private static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm());
рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рдереЗ рдХрд┐ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рджреГрд╢реНрдп рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреЛрдб рдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджреЗрдЦрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ:
private static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); var presenter = new LoginPresenter(new LoginForm(), new LoginService());
рдЖрдЗрдП рдкрд╣рд▓реА рд╕реНрдХреНрд░реАрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
рдмреБрдирд┐рдпрд╛рджреА рдЗрдВрдЯрд░рдлреЗрд╕ // public interface IView { void Show(); void Close(); } // , public interface ILoginView : IView { string Username { get; } string Password { get; } event Action Login; // " " void ShowError(string errorMessage); } public interface IPresenter { void Run(); } // public interface ILoginService { bool Login(User user); // true - , false }
рд╡рд┐рдЪрд╛рд░ public class LoginPresenter : IPresenter { private readonly ILoginView _view; private readonly ILoginService _service; public LoginPresenter(ILoginView view, ILoginService service) { _view = view; _service = service; _view.Login += () => Login(_view.Username, _view.Password); } public void Run() { _view.Show(); } private void Login(string username, string password) { if (username == null) throw new ArgumentNullException("username"); if (password == null) throw new ArgumentNullException("password"); var user = new User {Name = username, Password = password}; if (!_service.Login(user)) { _view.ShowError("Invalid username or password"); } else { // , (?) } } }
рдПрдХ рдлреЙрд░реНрдо рдмрдирд╛рдирд╛ рдФрд░ рдЗрд╕рдореЗрдВ ILoginView рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд╕рд╛рде рд╣реА ILoginService рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
public partial class LoginForm : Form, ILoginView { // ... public new void Show() { Application.Run(this); } }
рдпрд╣ рд╡рд░реНрддрдиреА рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ, рдлрд╝реЙрд░реНрдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдФрд░ рдлрд╝реЙрд░реНрдо рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдкрд░ рдЖрд╡реЗрджрди рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕ рдкрд░ рд▓реМрдЯ рдЖрдПрдВрдЧреЗред
рдХреНрдпрд╛ рдкрд░реАрдХреНрд╖рдг рд╣реЛрдВрдЧреЗ?
рдкреНрд░рддрд┐рдирд┐рдзрд┐ (LoginPresenter) рд▓рд┐рдЦрдиреЗ рдХреЗ рдХреНрд╖рдг рд╕реЗ, рдкреНрд░рдкрддреНрд░ рдпрд╛ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд╕рд╛рдХрд╛рд░ рдХрд┐рдП рдмрд┐рдирд╛, рдЗрдХрд╛рдИ-рдкрд░реАрдХреНрд╖рдг рд╕реЗ рддреБрд░рдВрдд рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ NUnit рдФрд░ NSubstitute рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ (рдЙрдирдХреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рджреНрд╡рд╛рд░рд╛ рд╕реНрдЯрдм рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп)ред
LoginPresenter рдХреЗ рд▓рд┐рдП рдЯреЗрд╕реНрдЯ [TestFixture] public class LoginPresenterTests { private ILoginView _view; [SetUp] public void SetUp() { _view = Substitute.For<ILoginView>(); // var service = Substitute.For<ILoginService>(); // service.Login(Arg.Any<User>()) // admin/password .Returns(info => info.Arg<User>().Name == "admin" && info.Arg<User>().Password == "password"); var presenter = new LoginPresenter(_view, service); presenter.Run(); } [Test] public void InvalidUser() { _view.Username.Returns("Vladimir"); _view.Password.Returns("VladimirPass"); _view.Login += Raise.Event<Action>(); _view.Received().ShowError(Arg.Any<string>()); // } [Test] public void ValidUser() { _view.Username.Returns("admin"); _view.Password.Returns("password"); _view.Login += Raise.Event<Action>(); _view.DidNotReceive().ShowError(Arg.Any<string>()); // } }
рдкрд░реАрдХреНрд╖рдг рдмрд╣реБрдд рд╣реА рдЧреВрдВрдЧреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрд╡реЗрджрди рд╣реА рд╣реИред рд▓реЗрдХрд┐рди рд╡реИрд╕реЗ рднреА, рд╡реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рд╣реЛ рдЪреБрдХреЗ рд╣реИрдВред
рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рджреВрд╕рд░реА рд╕реНрдХреНрд░реАрди рдХреМрди рдФрд░ рдХреИрд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░реЗрдЧрд╛?
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛, рдореИрдВрдиреЗ рд╕рдлрд▓ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкрд░ рдХреЛрдИ рдХреЛрдб рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рд╣реИред рдореИрдВ рджреВрд╕рд░реА рд╕реНрдХреНрд░реАрди рдХреИрд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░реВрдВ? рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдорди рдореЗрдВ рдЖрддрд╛ рд╣реИ:
// LoginPresenter: var mainPresenter = new MainPresenter(new MainForm()); mainPresenter.Run(user);
рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рдереЗ рдХрд┐ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдЕрдкрдиреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдХрд░реЗрдВ?
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрдВрдЯреНрд░реЛрд▓рд░ рдкреИрдЯрд░реНрди (рдПрдХ рд╕рд░рд▓реАрдХреГрдд рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд) рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЕрдВрджрд░ рдПрдХ IoC рдХрдВрдЯреЗрдирд░ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдпрд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рддрд┐рдирд┐рдзрд┐ (рдлрд┐рд░ рдбреАрдЖрдИ) рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ:
public interface IApplicationController { IApplicationController RegisterView<TView, TImplementation>() where TImplementation : class, TView where TView : IView; IApplicationController RegisterService<TService, TImplementation>() where TImplementation : class, TService; void Run<TPresenter>() where TPresenter : class, IPresenter; }
рдереЛрдбрд╝реЗ рд╕реЗ рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рдмрд╛рдж, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдиреЗ рд▓рдЧрд╛:
private static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false);
new ApplicationController(new LightInjectAdapder())
рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрджред рдПрдХ рдЖрдИрдУрд╕реА рдХрдВрдЯреЗрдирд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рд▓рд╛рдЗрдЯрдЗрдиреНрдЬреЗрдХреНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рд╕реАрдзреЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдПрдбреЗрдкреНрдЯрд░ (рдПрдбреЗрдкреНрдЯрд░ рдкреИрдЯрд░реНрди) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рддрд╛рдХрд┐ рдЕрдЧрд░ рдореБрдЭреЗ рдХрдВрдЯреЗрдирд░ рдХреЛ рджреВрд╕рд░реЗ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ, рддреЛ рдореИрдВ рдПрдХ рдФрд░ рдПрдбрд╛рдкреНрдЯрд░ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдирд┐рдпрдВрддреНрд░рдХ рддрд░реНрдХ рдХреЛ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддрд╛ред рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЖрдИрдУрд╕реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╣реИрдВ, рдХреЛрдИ рднреА рдХрдард┐рдирд╛рдИ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рд╣рдо рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ
IPresenter, , Run . .
, , , :
Controller.Run<MainPresener, User>(user); View.Close();
...
View.Close()
, , . , Application.Run(Form)
Windows . , ExitThread
Form.Closed
, .
, - : Application.Run(ApplicationContext)
, ApplicationContext.MainForm
. , (instance) ApplicationContext ( DI) . :
IPresenter, , Run . .
, , , :
Controller.Run<MainPresener, User>(user); View.Close();
...
View.Close()
, , . , Application.Run(Form)
Windows . , ExitThread
Form.Closed
, .
, - : Application.Run(ApplicationContext)
, ApplicationContext.MainForm
. , (instance) ApplicationContext ( DI) . :
// LoginForm public new void Show() { _context.MainForm = this; Application.Run(_context); } // MainForm public new void Show() { _context.MainForm = this; base.Show(); }
. " " Controller.Run<ChangeUsernamePresenter, User>(user)
. - , ApplicationContext:
public new void Show() { ShowDialog(); }
, , Form.
... ?
, , :
, ( ). , , - . [] , , . [] . .
IoC- IContainer -.
c Github ( Nuget-).
, , - MVP, , , .
. , , !
, :
- ( );
- ( Event Aggregator);
-
,
, MVP
Passive View
Application Controller
Application Controller Event Aggregator
Application Controller
MVP ,
Presenter
IPresenter, , Run . .
, , , :
Controller.Run<MainPresener, User>(user); View.Close();
...
View.Close()
, , . , Application.Run(Form)
Windows . , ExitThread
Form.Closed
, .
, - : Application.Run(ApplicationContext)
, ApplicationContext.MainForm
. , (instance) ApplicationContext ( DI) . :
// LoginForm public new void Show() { _context.MainForm = this; Application.Run(_context); } // MainForm public new void Show() { _context.MainForm = this; base.Show(); }
. " " Controller.Run<ChangeUsernamePresenter, User>(user)
. - , ApplicationContext:
public new void Show() { ShowDialog(); }
, , Form.
... ?
, , :
, ( ). , , - . [] , , . [] . .
IoC- IContainer -.
c Github ( Nuget-).
, , - MVP, , , .
. , , !
, :
- ( );
- ( Event Aggregator);
-
,
, MVP
Passive View
Application Controller
Application Controller Event Aggregator
Application Controller
MVP ,
Presenter
IPresenter, , Run . .
, , , :
Controller.Run<MainPresener, User>(user); View.Close();
...
View.Close()
, , . , Application.Run(Form)
Windows . , ExitThread
Form.Closed
, .
, - : Application.Run(ApplicationContext)
, ApplicationContext.MainForm
. , (instance) ApplicationContext ( DI) . :
// LoginForm public new void Show() { _context.MainForm = this; Application.Run(_context); } // MainForm public new void Show() { _context.MainForm = this; base.Show(); }
. " " Controller.Run<ChangeUsernamePresenter, User>(user)
. - , ApplicationContext:
public new void Show() { ShowDialog(); }
, , Form.
... ?
, , :
, ( ). , , - . [] , , . [] . .
IoC- IContainer -.
c Github ( Nuget-).
, , - MVP, , , .
. , , !
, :
- ( );
- ( Event Aggregator);
-
,
, MVP
Passive View
Application Controller
Application Controller Event Aggregator
Application Controller
MVP ,
Presenter
IPresenter, , Run . .
, , , :
Controller.Run<MainPresener, User>(user); View.Close();
...
View.Close()
, , . , Application.Run(Form)
Windows . , ExitThread
Form.Closed
, .
, - : Application.Run(ApplicationContext)
, ApplicationContext.MainForm
. , (instance) ApplicationContext ( DI) . :
IPresenter, , Run . .
, , , :
Controller.Run<MainPresener, User>(user); View.Close();
...
View.Close()
, , . , Application.Run(Form)
Windows . , ExitThread
Form.Closed
, .
, - : Application.Run(ApplicationContext)
, ApplicationContext.MainForm
. , (instance) ApplicationContext ( DI) . :
// LoginForm public new void Show() { _context.MainForm = this; Application.Run(_context); } // MainForm public new void Show() { _context.MainForm = this; base.Show(); }
. " " Controller.Run<ChangeUsernamePresenter, User>(user)
. - , ApplicationContext:
public new void Show() { ShowDialog(); }
, , Form.
... ?
, , :
, ( ). , , - . [] , , . [] . .
IoC- IContainer -.
c Github ( Nuget-).
, , - MVP, , , .
. , , !
, :
- ( );
- ( Event Aggregator);
-
,
, MVP
Passive View
Application Controller
Application Controller Event Aggregator
Application Controller
MVP ,
Presenter
IPresenter, , Run . .
, , , :
Controller.Run<MainPresener, User>(user); View.Close();
...
View.Close()
, , . , Application.Run(Form)
Windows . , ExitThread
Form.Closed
, .
, - : Application.Run(ApplicationContext)
, ApplicationContext.MainForm
. , (instance) ApplicationContext ( DI) . :
// LoginForm public new void Show() { _context.MainForm = this; Application.Run(_context); } // MainForm public new void Show() { _context.MainForm = this; base.Show(); }
. " " Controller.Run<ChangeUsernamePresenter, User>(user)
. - , ApplicationContext:
public new void Show() { ShowDialog(); }
, , Form.
... ?
, , :
, ( ). , , - . [] , , . [] . .
IoC- IContainer -.
c Github ( Nuget-).
, , - MVP, , , .
. , , !
, :
- ( );
- ( Event Aggregator);
-
,
, MVP
Passive View
Application Controller
Application Controller Event Aggregator
Application Controller
MVP ,
Presenter
IPresenter, , Run . .
, , , :
Controller.Run<MainPresener, User>(user); View.Close();
...
View.Close()
, , . , Application.Run(Form)
Windows . , ExitThread
Form.Closed
, .
, - : Application.Run(ApplicationContext)
, ApplicationContext.MainForm
. , (instance) ApplicationContext ( DI) . :
// LoginForm public new void Show() { _context.MainForm = this; Application.Run(_context); } // MainForm public new void Show() { _context.MainForm = this; base.Show(); }
. " " Controller.Run<ChangeUsernamePresenter, User>(user)
. - , ApplicationContext:
public new void Show() { ShowDialog(); }
, , Form.
... ?
, , :
, ( ). , , - . [] , , . [] . .
IoC- IContainer -.
c Github ( Nuget-).
, , - MVP, , , .
. , , !
, :
- ( );
- ( Event Aggregator);
-
,
, MVP
Passive View
Application Controller
Application Controller Event Aggregator
Application Controller
MVP ,
Presenter
IPresenter, , Run . .
, , , :
Controller.Run<MainPresener, User>(user); View.Close();
...
View.Close()
, , . , Application.Run(Form)
Windows . , ExitThread
Form.Closed
, .
, - : Application.Run(ApplicationContext)
, ApplicationContext.MainForm
. , (instance) ApplicationContext ( DI) . :
IPresenter, , Run . .
, , , :
Controller.Run<MainPresener, User>(user); View.Close();
...
View.Close()
, , . , Application.Run(Form)
Windows . , ExitThread
Form.Closed
, .
, - : Application.Run(ApplicationContext)
, ApplicationContext.MainForm
. , (instance) ApplicationContext ( DI) . :
// LoginForm public new void Show() { _context.MainForm = this; Application.Run(_context); } // MainForm public new void Show() { _context.MainForm = this; base.Show(); }
. " " Controller.Run<ChangeUsernamePresenter, User>(user)
. - , ApplicationContext:
public new void Show() { ShowDialog(); }
, , Form.
... ?
, , :
, ( ). , , - . [] , , . [] . .
IoC- IContainer -.
c Github ( Nuget-).
, , - MVP, , , .
. , , !
, :
- ( );
- ( Event Aggregator);
-
,
, MVP
Passive View
Application Controller
Application Controller Event Aggregator
Application Controller
MVP ,
Presenter
IPresenter, , Run . .
, , , :
Controller.Run<MainPresener, User>(user); View.Close();
...
View.Close()
, , . , Application.Run(Form)
Windows . , ExitThread
Form.Closed
, .
, - : Application.Run(ApplicationContext)
, ApplicationContext.MainForm
. , (instance) ApplicationContext ( DI) . :
// LoginForm public new void Show() { _context.MainForm = this; Application.Run(_context); } // MainForm public new void Show() { _context.MainForm = this; base.Show(); }
. " " Controller.Run<ChangeUsernamePresenter, User>(user)
. - , ApplicationContext:
public new void Show() { ShowDialog(); }
, , Form.
... ?
, , :
, ( ). , , - . [] , , . [] . .
IoC- IContainer -.
c Github ( Nuget-).
, , - MVP, , , .
. , , !
, :
- ( );
- ( Event Aggregator);
-
,
, MVP
Passive View
Application Controller
Application Controller Event Aggregator
Application Controller
MVP ,
Presenter
IPresenter, , Run . .
, , , :
Controller.Run<MainPresener, User>(user); View.Close();
...
View.Close()
, , . , Application.Run(Form)
Windows . , ExitThread
Form.Closed
, .
, - : Application.Run(ApplicationContext)
, ApplicationContext.MainForm
. , (instance) ApplicationContext ( DI) . :
// LoginForm public new void Show() { _context.MainForm = this; Application.Run(_context); } // MainForm public new void Show() { _context.MainForm = this; base.Show(); }
. " " Controller.Run<ChangeUsernamePresenter, User>(user)
. - , ApplicationContext:
public new void Show() { ShowDialog(); }
, , Form.
... ?
, , :
, ( ). , , - . [] , , . [] . .
IoC- IContainer -.
c Github ( Nuget-).
, , - MVP, , , .
. , , !
, :
- ( );
- ( Event Aggregator);
-
,
, MVP
Passive View
Application Controller
Application Controller Event Aggregator
Application Controller
MVP ,
Presenter
IPresenter, , Run . .
, , , :
Controller.Run<MainPresener, User>(user); View.Close();
...
View.Close()
, , . , Application.Run(Form)
Windows . , ExitThread
Form.Closed
, .
, - : Application.Run(ApplicationContext)
, ApplicationContext.MainForm
. , (instance) ApplicationContext ( DI) . :
// LoginForm public new void Show() { _context.MainForm = this; Application.Run(_context); } // MainForm public new void Show() { _context.MainForm = this; base.Show(); }
. " " Controller.Run<ChangeUsernamePresenter, User>(user)
. - , ApplicationContext:
public new void Show() { ShowDialog(); }
, , Form.
... ?
, , :
, ( ). , , - . [] , , . [] . .
IoC- IContainer -.
c Github ( Nuget-).
, , - MVP, , , .
. , , !
, :
- ( );
- ( Event Aggregator);
-
,
, MVP
Passive View
Application Controller
Application Controller Event Aggregator
Application Controller
MVP ,
Presenter
IPresenter, , Run . .
, , , :
Controller.Run<MainPresener, User>(user); View.Close();
...
View.Close()
, , . , Application.Run(Form)
Windows . , ExitThread
Form.Closed
, .
, - : Application.Run(ApplicationContext)
, ApplicationContext.MainForm
. , (instance) ApplicationContext ( DI) . :
// LoginForm public new void Show() { _context.MainForm = this; Application.Run(_context); } // MainForm public new void Show() { _context.MainForm = this; base.Show(); }
. " " Controller.Run<ChangeUsernamePresenter, User>(user)
. - , ApplicationContext:
public new void Show() { ShowDialog(); }
, , Form.
... ?
, , :
, ( ). , , - . [] , , . [] . .
IoC- IContainer -.
c Github ( Nuget-).
, , - MVP, , , .
. , , !
, :
- ( );
- ( Event Aggregator);
-
,
, MVP
Passive View
Application Controller
Application Controller Event Aggregator
Application Controller
MVP ,
Presenter
IPresenter, , Run . .
, , , :
Controller.Run<MainPresener, User>(user); View.Close();
...
View.Close()
, , . , Application.Run(Form)
Windows . , ExitThread
Form.Closed
, .
, - : Application.Run(ApplicationContext)
, ApplicationContext.MainForm
. , (instance) ApplicationContext ( DI) . :
// LoginForm public new void Show() { _context.MainForm = this; Application.Run(_context); } // MainForm public new void Show() { _context.MainForm = this; base.Show(); }
. " " Controller.Run<ChangeUsernamePresenter, User>(user)
. - , ApplicationContext:
public new void Show() { ShowDialog(); }
, , Form.
... ?
, , :
, ( ). , , - . [] , , . [] . .
IoC- IContainer -.
c Github ( Nuget-).
, , - MVP, , , .
. , , !
, :
- ( );
- ( Event Aggregator);
-
,
, MVP
Passive View
Application Controller
Application Controller Event Aggregator
Application Controller
MVP ,
Presenter
IPresenter, , Run . .
, , , :
Controller.Run<MainPresener, User>(user); View.Close();
...
View.Close()
, , . , Application.Run(Form)
Windows . , ExitThread
Form.Closed
, .
, - : Application.Run(ApplicationContext)
, ApplicationContext.MainForm
. , (instance) ApplicationContext ( DI) . :
// LoginForm public new void Show() { _context.MainForm = this; Application.Run(_context); } // MainForm public new void Show() { _context.MainForm = this; base.Show(); }
. " " Controller.Run<ChangeUsernamePresenter, User>(user)
. - , ApplicationContext:
public new void Show() { ShowDialog(); }
, , Form.
... ?
, , :
, ( ). , , - . [] , , . [] . .
IoC- IContainer -.
c Github ( Nuget-).
, , - MVP, , , .
. , , !
, :
- ( );
- ( Event Aggregator);
-
,
, MVP
Passive View
Application Controller
Application Controller Event Aggregator
Application Controller
MVP ,
Presenter
IPresenter, , Run . .
, , , :
Controller.Run<MainPresener, User>(user); View.Close();
...
View.Close()
, , . , Application.Run(Form)
Windows . , ExitThread
Form.Closed
, .
, - : Application.Run(ApplicationContext)
, ApplicationContext.MainForm
. , (instance) ApplicationContext ( DI) . :
// LoginForm public new void Show() { _context.MainForm = this; Application.Run(_context); } // MainForm public new void Show() { _context.MainForm = this; base.Show(); }
. " " Controller.Run<ChangeUsernamePresenter, User>(user)
. - , ApplicationContext:
public new void Show() { ShowDialog(); }
, , Form.
... ?
, , :
, ( ). , , - . [] , , . [] . .
IoC- IContainer -.
c Github ( Nuget-).
, , - MVP, , , .
. , , !
, :
- ( );
- ( Event Aggregator);
-
,
, MVP
Passive View
Application Controller
Application Controller Event Aggregator
Application Controller
MVP ,
Presenter
IPresenter, , Run . .
, , , :
Controller.Run<MainPresener, User>(user); View.Close();
...
View.Close()
, , . , Application.Run(Form)
Windows . , ExitThread
Form.Closed
, .
, - : Application.Run(ApplicationContext)
, ApplicationContext.MainForm
. , (instance) ApplicationContext ( DI) . :
// LoginForm public new void Show() { _context.MainForm = this; Application.Run(_context); } // MainForm public new void Show() { _context.MainForm = this; base.Show(); }
. " " Controller.Run<ChangeUsernamePresenter, User>(user)
. - , ApplicationContext:
public new void Show() { ShowDialog(); }
, , Form.
... ?
, , :
, ( ). , , - . [] , , . [] . .
IoC- IContainer -.
c Github ( Nuget-).
, , - MVP, , , .
. , , !
, :
- ( );
- ( Event Aggregator);
-
,
, MVP
Passive View
Application Controller
Application Controller Event Aggregator
Application Controller
MVP ,
Presenter
IPresenter, , Run . .
, , , :
Controller.Run<MainPresener, User>(user); View.Close();
...
View.Close()
, , . , Application.Run(Form)
Windows . , ExitThread
Form.Closed
, .
, - : Application.Run(ApplicationContext)
, ApplicationContext.MainForm
. , (instance) ApplicationContext ( DI) . :
// LoginForm public new void Show() { _context.MainForm = this; Application.Run(_context); } // MainForm public new void Show() { _context.MainForm = this; base.Show(); }
. " " Controller.Run<ChangeUsernamePresenter, User>(user)
. - , ApplicationContext:
public new void Show() { ShowDialog(); }
, , Form.
... ?
, , :
, ( ). , , - . [] , , . [] . .
IoC- IContainer -.
c Github ( Nuget-).
, , - MVP, , , .
. , , !
, :
- ( );
- ( Event Aggregator);
-
,
, MVP
Passive View
Application Controller
Application Controller Event Aggregator
Application Controller
MVP ,
Presenter
IPresenter, , Run . .
, , , :
Controller.Run<MainPresener, User>(user); View.Close();
...
View.Close()
, , . , Application.Run(Form)
Windows . , ExitThread
Form.Closed
, .
, - : Application.Run(ApplicationContext)
, ApplicationContext.MainForm
. , (instance) ApplicationContext ( DI) . :
// LoginForm public new void Show() { _context.MainForm = this; Application.Run(_context); } // MainForm public new void Show() { _context.MainForm = this; base.Show(); }
. " " Controller.Run<ChangeUsernamePresenter, User>(user)
. - , ApplicationContext:
public new void Show() { ShowDialog(); }
, , Form.
... ?
, , :
, ( ). , , - . [] , , . [] . .
IoC- IContainer -.
c Github ( Nuget-).
, , - MVP, , , .
. , , !
, :
- ( );
- ( Event Aggregator);
-
,
, MVP
Passive View
Application Controller
Application Controller Event Aggregator
Application Controller
MVP ,
Presenter
IPresenter, , Run . .
, , , :
Controller.Run<MainPresener, User>(user); View.Close();
...
View.Close()
, , . , Application.Run(Form)
Windows . , ExitThread
Form.Closed
, .
, - : Application.Run(ApplicationContext)
, ApplicationContext.MainForm
. , (instance) ApplicationContext ( DI) . :
// LoginForm public new void Show() { _context.MainForm = this; Application.Run(_context); } // MainForm public new void Show() { _context.MainForm = this; base.Show(); }
. " " Controller.Run<ChangeUsernamePresenter, User>(user)
. - , ApplicationContext:
public new void Show() { ShowDialog(); }
, , Form.
... ?
, , :
, ( ). , , - . [] , , . [] . .
IoC- IContainer -.
c Github ( Nuget-).
, , - MVP, , , .
. , , !
, :
- ( );
- ( Event Aggregator);
-
,
, MVP
Passive View
Application Controller
Application Controller Event Aggregator
Application Controller
MVP ,
Presenter
IPresenter, , Run . .
, , , :
Controller.Run<MainPresener, User>(user); View.Close();
...
View.Close()
, , . , Application.Run(Form)
Windows . , ExitThread
Form.Closed
, .
, - : Application.Run(ApplicationContext)
, ApplicationContext.MainForm
. , (instance) ApplicationContext ( DI) . :
// LoginForm public new void Show() { _context.MainForm = this; Application.Run(_context); } // MainForm public new void Show() { _context.MainForm = this; base.Show(); }
. " " Controller.Run<ChangeUsernamePresenter, User>(user)
. - , ApplicationContext:
public new void Show() { ShowDialog(); }
, , Form.
... ?
, , :
, ( ). , , - . [] , , . [] . .
IoC- IContainer -.
c Github ( Nuget-).
, , - MVP, , , .
. , , !
, :
- ( );
- ( Event Aggregator);
-
,
, MVP
Passive View
Application Controller
Application Controller Event Aggregator
Application Controller
MVP ,
Presenter