Vítejte na blog.vyvojar.cz Přihlásit | Registrovat | Pomoc
Titulní Blogy Fotky Soubory

keby

  • Generická bázová trieda pre WinForm a designer

    Ako som zistil, čo pre vačšinu z Vás asi prekvapenie nebude, designer pre win form aplikácie nepodporuje generickú bázovú triedu.

    Kedže sa snažím hrať s MVP paternom, vcelku by sa mi tá jeho podpora hodila. A síce som nenašiel "dokonalé" riešenie, ale pomohlo za vcelku malú pracnosť.

    Potreboval som niečo na štýl ...

     public partial class frmMainApplicationFormView : ViewBaseApplicationForm<ApplicationFormViewPresenter>, IDefaultFormView

     

    kde ViewBaseApplicationForm je bázová trieda, ktorá ma vlastnosť na vracanie inštancie Presenter typu  ApplicationFormViewPresenter a zároveň implementuje rozhranie IDefaultFormView.

    Podstatné však na  ViewBaseApplicationForm je to, že je tam implementovaná určitá funkcionalita a ponúka prístup priamo na presenter daného typu.

    Využil som tie potvory typu #define a #if, s tým strašne zložitým názvom. A to následne :


    #if DESIGN
        public partial class frmMainApplicationFormView : LegacyForm, IPresenterWrapper<ApplicationFormViewPresenter>, IDefaultFormView
        {
            #region IPresenterWrapper<ApplicationFormViewPresenter> Members

            public ApplicationFormViewPresenter Presenter
            {
                get
                {
                    throw new NotImplementedException();
                }
                set
                {
                    throw new NotImplementedException();
                }
            }

            #endregion
    #else
        public partial class frmMainApplicationFormView : ViewBaseApplicationForm<ApplicationFormViewPresenter>, IDefaultFormView
        {
    #endif

    ....

    .....

    }

    LegacyForm je bázová trieda pre formulár.  Samozrejme, može byť aj Form, hlavne nie je generická :). IPresenterWrapper je interface, ktorý je definovaný tak, aby obsahoval vlastnosti a prípadne metódy, ktoré implementuje bázová trieda ViewBaseApplicationForm. Nebolo až tak tažké ho vytvoriť, pravé tlačitko, refactor... Pre prípadne umožnenie override metód musí tieto metódy implementovat LegacyForm, v tom prípade by sa možno mala volať ViewBaseApplicationFormWrapper.Ale veď všetko cez eventy, nie ? :)


    Takže si takto pripravím formulár ( šablona alebo snippet to vcelku rieši )  a dám implemetovať interface IPresenterWrapper. To že je to defaultná implementacia s "throw new Not..." designeru zatial nevadí.

    A potom stačí na prepnutie do design módu zadať #define DESIGN.

     

    No neviem či Vám to mohlo, me zatiaľ hej.

    Inak pardon za gramatiku, preklepy atď.

Powered by Community Server (Personal Edition), by Telligent Systems
Vyvojar.cz na prodej!