WinForms рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ ApplicationController рдФрд░ IoC рдкрд░ рдЖрдзрд╛рд░рд┐рдд MVP рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рдирдорд╕реНрдХрд╛рд░!

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдБрдЧрд╛ рдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╡рд┐рдВрдбреЛрдЬ рдлреЙрд░реНрдо рдПрдкреНрд▓реАрдХреЗрд╢рди рдореЗрдВ рдПрдорд╡реАрдкреА рдкреИрдЯрд░реНрди рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдФрд░ рдЖрдИрдУрд╕реА рдФрд░ рдПрдкреНрд▓реАрдХреЗрд╢рдирдХрдВрдЯреНрд░реЛрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ред рдХреЛрдбрдмреЗрд╣рд┐рдВрдж рд╕реЗ MVP рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рд╕реЗ рдореБрдЭреЗ рдЕрдиреБрдорддрд┐ рдорд┐рд▓реА:

  • рдмреЗрд╣рддрд░ рдХреЛрдб рдкреГрдердХреНрдХрд░рдг (рдПрд╕рдЖрд░рдкреА) рдХреЗ рдХрд╛рд░рдг рдкрдардиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ - рд╡реНрдпреВ рд╕реЗ рдЕрд▓рдЧ рдмреАрдПрд▓;
  • рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдФрд░ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрджреНрдзрддрд┐ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛;
  • рд╕рд┐рдВрдЧрд▓рдЯрди рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдПрдВ, рдЬрд┐рд╕реЗ рдореИрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ред

рдРрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


рдирд┐рдГрд╢реБрд▓реНрдХ рдПрдХ app рдХреБрд▓рдкрддрд┐ рд╕рдореВрд╣реЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЖрдкрдХреЛ рд▓рдВрдмрд┐рдд рдкрджреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдореВрд╣ рдХреЛ рднрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рд╕рдордп рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд▓рдВрдмрд┐рдд рдкреЛрд╕реНрдЯреЛрдВ рдХреЛ VK рд╕рдореВрд╣ рдореЗрдВ рдЪрд┐рддреНрд░реЛрдВ рдпрд╛ рд╡реАрдбрд┐рдпреЛ, рд╣реИрд╢рдЯреИрдЧ, рдкреЛрд▓, рдЬрд┐рдпреЛ-рд▓реЛрдХреЗрд╢рди рдФрд░ рдкреНрд░рдХрд╛рд╢рди рд╕рдордп рдФрд░ рдкреЛрд╕реНрдЯреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рд▓реЛрдб рдХрд░ рд░рд╣реА рд╣реИред рдлрд┐рд▓рд╣рд╛рд▓, рдЖрд╡реЗрджрди рдХрд╛ рдПрдХ рд░реВрдк рд╣реИред

рдЕрдкрдиреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде, рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдбрд╣рд╛рдЗрдВрдб рдЬрдорд╛ рд╣реБрдП, рдЬреЛ рдЗрд╕ рддрдереНрдп рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд▓рдЧреЗ рдХрд┐ рдлреЙрд░реНрдо рдмрд╣реБрдд рд▓реЛрдб рд╣реЛ рдЧрдпрд╛ рдФрд░ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рд╕рдм рдХреБрдЫ рд╕рдорд╛рд╣рд┐рдд рдХрд░ рд▓рд┐рдпрд╛ред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЖрдЧреЗ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╕рдордп, рдореИрдВ рдХрд▓реНрдкрдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдерд╛ рдХрд┐ рдПрдХ рд╣реА рднрд╛рд╡рдирд╛ рдореЗрдВ рдЖрдЧреЗ рдХреНрдпрд╛ рдЬрд╛рд░реА рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЕрдм рд╡рд╣ рдХреНрд╖рдг рдЖрдпрд╛ рдЬрдм рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдкрд░рд┐рд╖реНрдХреГрдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реЗ рднрд░рдирд╛ред рдФрд░ рдореИрдВрдиреЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рдвреВрдВрдврдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬреЛ рдХреЛрдб рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░реЗрдЧрд╛ рддрд╛рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрдЦрдж рд╣реЛред

рд╕реНрд░реЛрдд

рд╕рдорд╛рдзрд╛рди рдХреЛ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдирд╛


рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рдПрдорд╡реАрдкреА рдкреИрдЯрд░реНрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдерд╛ред рдПрдХ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рд╡рд┐рдВрдбреЛрдЬ рдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдПрдорд╡реАрдкреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реБрд╡рд┐рдзрд╛рдПрдБ рд▓реЗрдЦ рд▓рд┐рдпрд╛ ред

рд▓реЗрдЦ 3 рд░реВрдкреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдЙрджрд╛рд╣рд░рдг рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ: 2 рдореБрдЦреНрдп рдФрд░ 1 рдореЛрдбрд▓ред рд▓реЗрдЦ рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдиреНрдирдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИ:

  • ApplicationController рдФрд░ IoC рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдбрд╛рдкреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд╣рд╛рдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╡рд┐рднрд┐рдиреНрди IoCs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ;
  • 3 рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк: рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде, рдорд╛рдкрджрдВрдбреЛрдВ рдФрд░ рдореЛрдбрд▓ рдХреЗ рдмрд┐рдирд╛;
  • рдбреАрдЖрдИрдкреА рд╕рд┐рджреНрдзрд╛рдВрдд рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдореИрдВ рдХреЗрд╡рд▓ рддрд░реНрдХреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдлреЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдПрдбреЙрдкреНрдЯрд░ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ (YAGNI рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдкрд╛рд▓рди), рдЪреВрдВрдХрд┐ IoC рд▓рд╛рдЗрдЯрд┐рдирдЬреЗрдХреНрдЯ рдореЗрд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдФрд░ рдХреБрдЫ рд╣рдж рддрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбреАрдЖрдИрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдПрдорд╡реАрдкреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рдПрдорд╡реАрдкреА (рдореЙрдбрд▓-рд╡реНрдпреВ-рдкреНрд░рд╕реНрддреЛрддрд╛) рдПрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рд╣реИ рдЬрд┐рд╕реЗ рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдк рдКрдкрд░ рдХреЗ рд▓реЗрдЦ рдореЗрдВ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдШрдЯрдХреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛:

  • рдореЙрдбрд▓ рдПрдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╡реНрдпреВ рдФрд░ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХреЗ рдмреАрдЪ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдФрд░ рддрд░реНрдХ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореЙрдбрд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реИред рдЬрдм рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ, рддреЛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдореЗрдирдлреЙрд░реНрдо рд╡реНрдпреВ рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЬрдм рд▓реЛрдбрд┐рдВрдЧ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ, рддреЛ рдореЗрдирдлреЙрд░рдо рд╡реНрдпреВ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХреЛ рд╕реЗрдЯрд┐рдЧреНрдиреНрд╕ рдХреЛ рдЪреЗрдХ рдФрд░ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рддрд░реНрдХ рдХреЛ рдЕрдкрдиреА рддрд░рдл рдЪрд▓рд╛рдПред
  • рджреГрд╢реНрдп рдПрдХ рдРрд╕рд╛ рд░реВрдк рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╕реЗрдЯрд┐рдВрдЧ рдореЙрдбрд▓ рдХрд╛ рдбреЗрдЯрд╛ рд╣реИ, рдФрд░ рд╡реНрдпреВ рднреА рдИрд╡реЗрдВрдЯ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдмреАрдПрд▓ рдХреЗ рд╕рд╛рде рд╡реНрдпреВ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХреЗред

MainFormView рд╕рднреА рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп IView рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ

    public interface IView
    {
        void Show();

        void Close();
    }

рдПрдХ рдирд┐рдЬреА IMainFormView рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗрд╡рд▓ рдЗрд╕ рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИред рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХреЛ рд╕реАрдзреЗ рдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдРрд╕реЗ рджреГрд╢реНрдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрд░реАрдХреЛрдВ рдХрд╛ рдкреВрд░рд╛ рд╕реЗрдЯ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛, рдЬреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИред

    public interface IMainFormView: IView
    {
        void LoadSettings(Settings settings);

        void UpdateSettings(Settings settings);

        void ShowMessage(string message);

        void LoadGroups(List<Group> groups);

        void EnableVKUploadGroupBox();

        bool Check();

        event Action Login;

        new event Action Close;

        event Action VKUpload;
    }

рдПрдХ рдФрд░ MVP рдирд╡рд╛рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рд╢реЛ рд╡рд┐рдзрд┐ рдХреЛ рдлреЙрд░реНрдо рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ ApplicationContext рдХреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлреЙрд░реНрдо рдореЗрдВ рднреЗрдЬ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдлреЙрд░реНрдо рд╕реЗ рдлреЙрд░реНрдо рдФрд░ рдХреНрд▓реЛрдЬрд┐рдВрдЧ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╕рдордп, рдореБрдЦреНрдп рдлреЙрд░реНрдо рдХреЛ рдлрд┐рд░ рд╕реЗ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рдПред

        protected ApplicationContext _context;

        public MainForm(ApplicationContext context)
        {
            _context = context;
            InitializeComponent();

            dateTimePickerBeginDate.Format = DateTimePickerFormat.Custom;
            dateTimePickerBeginDate.CustomFormat = "MM/dd/yyyy hh:mm:ss";

            buttonAuth.Click += (sender, args) => Invoke(Login);
            this.FormClosing += (sender, args) => Invoke(Close);
            buttonLoad.Click += (sender, args) => Invoke(VKUpload);
        }

        public new void Show()
        {
            _context.MainForm = this;
            Application.Run(_context);
        }

- рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдПрдХ рдРрд╕рд╛ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рд╡реНрдпреВ, рд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдФрд░ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ (рдмреАрдПрд▓) рдХреЛ рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рдорджрдж рд╕реЗ рдпрд╣ рд╡реНрдпреВ рдФрд░ рд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдХреЗ рдмреАрдЪ рдЗрдВрдЯрд░реЗрдХреНрд╢рди рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддрд╛ рд╣реИред рдмреАрдПрд▓ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╡реНрдпреВ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╣рд▓реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП рдХреЛрдбрдмрд╛рдЗрдВрдб рдХреЗ рд╡рд┐рдкрд░реАрдд, рдмреАрд╡реА рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдорд╡реАрдкреА рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рд╡реНрдпреВ рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдмрд┐рдирд╛ рддрд░реНрдХ рдХреЗ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣реИрдВрдбрд▓рд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлреЙрд░реНрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдореЙрдбрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред

рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдореЗрдВ рд░рди рд╡рд┐рдзрд┐ рд╣реИ, рдЬрд┐рд╕реЗ ApplicationController рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЬреЛ рдлреЙрд░реНрдо рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИ:

    public interface IPresenter
    {
        void Run();
    }

ApplicationController - рдирд┐рдпрдВрддреНрд░рдг рдФрд░ рдкреВрд░реЗ рдЖрд╡реЗрджрди рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдПрдХ рдмрд┐рдВрджреБред рдЖрдИрдУрд╕реА, рдкреНрд░реЗрдЬреЗрдВрдЯрд░реНрд╕, рд╡реНрдпреВ, рд╕рд░реНрд╡рд┐рд╕реЗрд╕: рд╕рднреА рд▓реЙрдЬрд┐рдХ рдХреЛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд░рддрд╛ рд╣реИред

рдкреНрд░рдмрдВрдзрди рд░рди рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рд╕рднреА рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ ApplicationController рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ, рдЬрд┐рд╕реЗ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рд░рди рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдПрдХ рдЕрдиреНрдп рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ IoC рдХрдВрдЯреЗрдирд░ рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИред

    public class ApplicationController
    {
        ServiceContainer _container;

        public ApplicationController(ServiceContainer serviceContainer)
        {
            _container = serviceContainer;
            _container.RegisterInstance<ApplicationController>(this);
        }

        public void Run<TPresenter>() where TPresenter:class, IPresenter
        {
            var presenter = _container.GetInstance<TPresenter>();
            presenter.Run();
        }
    }

IoC рдХрдВрдЯреЗрдирд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддрд░реНрдХ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рднреА "рдирд┐рд░реНрднрд░рддрд╛" рдХрд╛ рдПрдХ рдПрдЧреНрд░реАрдЧреЗрдЯрд░ рд╣реИред рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ:

  • рдирд┐рд░реНрдорд╛рддрд╛ рджреЗрдЦреЗрдВ
  • рдирд┐рд░реНрдорд╛рддрд╛ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛
  • рд╕реЗрд╡рд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдг
  • рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рдВрджрд░реНрдн
  • ApplicationController

рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдХреЗ рджреМрд░рд╛рди рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдпрд╣ Program.cs рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

         static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            ulong appid = ulong.Parse(ConfigurationManager.AppSettings["AppIdForTest"]);
            VKGroupHelperWorker vk = new VKGroupHelperWorker(appid);


            ServiceContainer container = new ServiceContainer();
            container.RegisterInstance<VKGroupHelperWorker>(vk);
            container.RegisterInstance<Settings>(Globals.Settings);
            container.RegisterInstance<ApplicationContext>(Context);
            container.Register<IMainFormView,MainForm>();
            container.Register<MainFormPresenter>();

            ApplicationController controller = new ApplicationController(container);
            controller.Run<MainFormPresenter>();
        }

IoC рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ Lightinject рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬрд┐рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ NPM рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд┐рд░реНрдорд╛рддрд╛ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рджреЛрдиреЛрдВ рд╕реНрд╡рдпрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдФрд░ VKGroupHelperWorker (VK API рдХреНрд▓рд╛рдЗрдВрдЯ) рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рд╕реЗрдЯ рдмрдирд╛рддреЗ рд╣реИрдВред рдХрдВрдЯреЗрдирд░ рдХреА рдПрдХ рдЙрдкрдпреЛрдЧреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрди рд╕рднреА рдПрдореНрдмреЗрдбреЗрдб рд╕рдВрд╕рд╛рдзрдиреЛрдВ, рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рддрд░реНрдХреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
ApplicationController, IMainFormView, VKGroupHelperWorker - рдкрд╣рд▓реЗ рд▓рд╛рдЧреВ рдХреА рдЧрдИ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ, рдЬреЛ рдпрд╛ рддреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдпрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдпрджрд┐ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╕рднреА рдЙрддреНрдкрдиреНрди рд╡рд╕реНрддреБрдПрдВ рдПрдХ рд╣реА рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреА, рдЬреЛ рдЖрдкрдХреЛ рд╕рд┐рдВрдЧрд▓рдЯрди рдкреИрдЯрд░реНрди рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдпрджрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

public MainFormPresenter(ApplicationController applicationController, IMainFormView mainForm, Settings settings, VKGroupHelperWorker vk)
        {
            _view = mainForm;
            _settings = settings;
            _vk = vk;

            _view.Login += () => Login();
            _view.Close += () => Close();
            _view.VKUpload += () => VKUpload();
        }

рдПрдорд╡реАрдкреА рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдиреЗ рдореБрдЭреЗ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рджреА:

  • рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд╕рд┐рдВрдЧрд▓рдЯрди рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдПрдВ, рдЬрд┐рд╕реЗ рдореИрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рдерд╛;
  • рдмреАрдПрд▓ рдХреЛ рд╡реНрдпреВ рд╕реЗ рдЕрд▓рдЧ рдХрд░реЗрдВ, рдЬрд┐рд╕рд╕реЗ рдХреЛрдб рдкреГрдердХреНрдХрд░рдг (рдПрд╕рдЖрд░рдкреА) рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛрдЧрд╛
  • рджреГрд╢реНрдп рдХреЛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ред

рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рднрдВрдбрд╛рд░ рдореЗрдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ ред

All Articles