mvc - inicjalizacja

dział ogólny

mvc - inicjalizacja

Nowy postprzez Koziol » poniedziałek, 30 listopada 2009, 21:12

Inicjalizację każdego z elemetów programu - modelu widoku i kotrolera - lepiej przeprowadzać w osobnych wątkach, czy po kolei?
Avatar użytkownika
Koziol
Intelektryk
Intelektryk
 
Posty: 144
Dołączył(a): niedziela, 13 lipca 2008, 17:36
Podziękował : 8
Otrzymał podziękowań: 2
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
    NieznanyNieznana

Re: mvc - inicjalizacja

Nowy postprzez polymorphism » wtorek, 1 grudnia 2009, 11:40

Chyba nie sądzisz, że przy tak ogólnym pytaniu otrzymasz konkretną odpowiedź?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    NieznanyNieznana

Re: mvc - inicjalizacja

Nowy postprzez Koziol » wtorek, 1 grudnia 2009, 12:06

Kod: Zaznacz cały
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
        try
        {
                _View* = new View();
                View->init();     
                _Controller* = new Controller();
                Controller->init();
                _Model* = new Mosel();
                Model->init();
        }

czy może:
Kod: Zaznacz cały
int __fastcall ModelInit(Pointer Parameter)
{
                _Model* = new Mosel();
                Model->init();
                ExitThread(GetExitCodeThread(ModelInit, NULL));
}
int __fastcall ViewInit(Pointer Parameter)
{
                _View* = new View();
                View->init();
                ExitThread(GetExitCodeThread(ViewInit, NULL));
}
int __fastcall ControllerInit(Pointer Parameter)
{
                _Conreoller* = new Conreoller();
                Conreoller->init();
                ExitThread(GetExitCodeThread(ControllerInit, NULL));
}
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
        try
        {
               w_ctr = BeginThread(NULL, 0, ControllerInit, NULL, 0, w_ctr);
               w_viw = BeginThread(NULL, 0, ViewInit, NULL, 0,w_viw);
               w_mod = BeginThread(NULL, 0, ModelInit, NULL, 0, w_mod);       
        }


Która opcja jest lepsza i z jakimi zagrożeniami się wiąże inicjalizacja w osobnych wątkach bo nie wierze, że nie było by z tym problemów.
Avatar użytkownika
Koziol
Intelektryk
Intelektryk
 
Posty: 144
Dołączył(a): niedziela, 13 lipca 2008, 17:36
Podziękował : 8
Otrzymał podziękowań: 2
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
    NieznanyNieznana

Re: mvc - inicjalizacja

Nowy postprzez polymorphism » wtorek, 1 grudnia 2009, 13:03

Wybrałbym wersję pierwszą, bo jest prostsza, a takie rozwiązania są najlepsze. Zresztą nie widzę tu powodów do użycia wątków. Bo co zyskasz wykorzystując je?



ExitThread(GetExitCodeThread(ModelInit, NULL));

Ta linia jest zupełnie bez sensu. Zamiast tej linii daj po prostu:
Kod: Zaznacz cały
return 0;

;)

____
p.s. czy mi się wydaje, czy korzystasz ze zmiennych globalnych?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    NieznanyNieznana

Re: mvc - inicjalizacja

Nowy postprzez Koziol » wtorek, 1 grudnia 2009, 13:09

Wybrałbym wersję pierwszą, bo jest prostsza, a takie rozwiązania są najlepsze. Zresztą nie widzę tu powodów do użycia wątków. Bo co zyskasz wykorzystując je?


Ok. Zrobię jak mówisz. (myślałem że przyspieszy to nieco ładowanie - operacja łączenia się z bazą danych może trochę zajmować itp ale jak mówisz że lepiej będzie po kolei to ok)





ps. Tylko w plikach Controller.h, View.h oraz Model.h mam zadeklarowane extern Model* _Model itd. Jeżeli tak jest nie prawidłowo mogę pomyśleć nad innym rozwiązaniem.
Avatar użytkownika
Koziol
Intelektryk
Intelektryk
 
Posty: 144
Dołączył(a): niedziela, 13 lipca 2008, 17:36
Podziękował : 8
Otrzymał podziękowań: 2
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
    NieznanyNieznana

Re: mvc - inicjalizacja

Nowy postprzez polymorphism » wtorek, 1 grudnia 2009, 13:30

operacja łączenia się z bazą danych może trochę zajmować

A widzisz, podałeś jakiś szczegół, który zmienia nieco postać rzeczy. Tutaj zastanowiłbym się nad wątkiem, ale nie realizowałbym tego tak jak to przedstawiłeś. Jeśli Mosel nawiązuje połączenie, niech wątek będzie tworzony wewnątrz tej klasy, np. w konstruktorze.

Jeżeli tak jest nie prawidłowo mogę pomyśleć nad innym rozwiązaniem.

W programowaniu obiektowym w 99,9% przypadków zmienne globalne są zbędne. Jeśli kontroler ma wiedzieć o modelu, dostarcz go poprzez publiczny interface klasy (konstruktor?).
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    NieznanyNieznana

Re: mvc - inicjalizacja

Nowy postprzez Koziol » wtorek, 1 grudnia 2009, 15:16

A może lepszym rozwiązaniem niż przekazywanie wskaźnika było by zastosowanie Singletonu w Modelu widoku i kontrolerze? Co o tym byś myślał?
Avatar użytkownika
Koziol
Intelektryk
Intelektryk
 
Posty: 144
Dołączył(a): niedziela, 13 lipca 2008, 17:36
Podziękował : 8
Otrzymał podziękowań: 2
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
    NieznanyNieznana

Re: mvc - inicjalizacja

Nowy postprzez polymorphism » wtorek, 1 grudnia 2009, 15:54

Stosowanie singletonów tylko po to, żeby dostęp do obiektów był tak wygodny jak do zmiennych globalnych IMO mija się z celem. Ale znowu, wszystko zależy od tego, co chcesz zrobić. Jeśli przewidujesz, że aplikacja w przyszłości może być aplikacją MDI lub może posiadać wiele widoków itp., no to singleton zupełnie tu nie pasuje, a nawet skomplikuje dalszy rozwój aplikacji.

Singleton jest stosunkowo rzadko stosowanym wzorcem.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    NieznanyNieznana

Re: mvc - inicjalizacja

Nowy postprzez Koziol » wtorek, 1 grudnia 2009, 16:00

Ok w takim razie zdefiniuje w kontrolerze wskaźniki na model oraz widok, a w modelu wskaźnik na widok mam nadzieje że taki sposób będzie prawidłowy.
Avatar użytkownika
Koziol
Intelektryk
Intelektryk
 
Posty: 144
Dołączył(a): niedziela, 13 lipca 2008, 17:36
Podziękował : 8
Otrzymał podziękowań: 2
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
    NieznanyNieznana


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 5 gości