Przekazanie referencji do formy a wydajność

0

Witam.

Jest sobie forma i procedura w klasie. W procedurze tej, potrzebuję dostępu do kontrolek różnego typu z formy.
Czy lepiej przekazać kilka referencji do potrzebnych kontrolek czy referencję do całej formy (trzeba by zmienić modyfikatory kontrolek na public)?
W końcu przekazuje się i tak tylko adres. Pytam w kontekście poprawności i wydajności.

1

Szczerze mówiąc to żadna z tych opcji nie jest dobra, bo na dobrą sprawę nie powinieneś się odwoływać do kontrolek okna z innych klas, a już na pewno nie w ten sposób.

"Wydajniejsze" będzie przekazanie całej formy, ale w ten sposób zyskasz kilka cykli zegarowych. Taka optymalizacja to naprawdę głupi pomysł.
Już lepsze rozwiązanie to przekazanie referencji do każdej kontrolki...

Nie mogę Ci podać jakie byłoby najlepsze rozwiązanie (a przynajmniej jak ja bym to zrobił ;) ), bo nie wiem co właściwie chcesz osiągnąć.

0
MSM napisał(a)

"Wydajniejsze" będzie przekazanie całej formy, ale w ten sposób zyskasz kilka cykli zegarowych.

Przekażesz jedną referencję zamiast kilku, ale będziesz miał dodatkowy poziom zagnieżdżenia pointerów - każde odwołanie będzie kosztować instrukcję więcej. Także 'to zależy'.

Takie pytania, szczególnie w wypadku technologii opartych o VM, JIT itd. są zdecydowanie nie na miejscu.

0
MSM napisał(a)

Szczerze mówiąc to żadna z tych opcji nie jest dobra, bo na dobrą sprawę nie powinieneś się odwoływać do kontrolek okna z innych klas, a już na pewno nie w ten sposób.

Można trochę jaśniej? Czyli wszystko co odwołuje się do kontrolek formy, powinno znajdować się w klasie formy?
A jeśli potrzebuję na przykład zawartość okienka tekstowego, to przekazać jego wartość jako string, zamiast referencji do textboxa?

0
shifttab napisał(a)

Czy lepiej przekazać kilka referencji do potrzebnych kontrolek czy referencję do całej formy (trzeba by zmienić modyfikatory kontrolek na public)?

Obydwa rozwiązania są słabe. Nie rób dostępu do kontrolek, ani nie operuj na nich bezpośrednio z drugiej formy.
Na pierwszej formie zrób sobie metody obsługujące te kontrolki, do drugiej formy przekaż referencję na pierwszą i używaj tych metod. Będzie to miało choćby znamiona enkapsulacji. (To też jest słabe rozwiązanie, ale w małej aplikacji jeszcze ujdzie.)

0
somekind napisał(a)

Obydwa rozwiązania są słabe. Nie rób dostępu do kontrolek, ani nie operuj na nich bezpośrednio z drugiej formy.
Na pierwszej formie zrób sobie metody obsługujące te kontrolki, do drugiej formy przekaż referencję na pierwszą i używaj tych metod. Będzie to miało choćby znamiona enkapsulacji. (To też jest słabe rozwiązanie, ale w małej aplikacji jeszcze ujdzie.)

Skoro i to jest słabe, to co trzeba zrobić, żeby było dobrze?
Można gdzieś znaleźć przykładowy projekt dobrze napisanej aplikacji?

0

Poczytaj o wzorcu MVP (model view presenter) jeśli korzystasz ze zwykłych formsów lub MVVM (model view viewmodel) jeśli z WPFa.

0

Generalnie chodzi o to, abyś oddzielił twoją warstwę prezentacji (kontrolki) od całej logiki (twoje klasy, który "coś robią"). Jak już ktoś wspomniał - wzorzec MVC opisuje to, co chcesz osiągnąć.

0

Nie należy przekazywać referencji do kontrolek, lecz utworzyć delegaty i zdarzenia. I nie, nie będzie to tak szybkie, jak bezpośrednie przekazanie kontrolki. Ale chyba nie robisz tego milion razy na sekundę, prawda?

0

Poza tym, jak już ktoś napomknął, sposób w jaki przekazujesz referencję praktycznie nigdy nie jest brany pod uwagę w zapewnieniu dobrego performance.

0

Znalazłem bardzo ciekawy wykład o wzorcu mvc:
http://vimeo.com/718265

1 użytkowników online, w tym zalogowanych: 0, gości: 1