Podejście MVC z C++

Uczyłem się PHP MVC pattern i jest całkiem fajny. prawie skończyłem aplikację i widzę, jak bałagan można zrobić kod bez dobrego projektu. Czy MCV może być stosowany w aplikacjach C++? Gdzie jest menedżer wtyczek / wtyczek, jeśli jest to w ogóle możliwe?Model czy kontroler? Dzięki!

EDIT:

Mam na myśli C++ z GUI toolkit jak QT/wxWidgets/GTK+ Również proszę o pomoc jak zaimplementować w C++. Nauczyłem się jak to zrobić w PHP ale jak wiadomo oba języki są jakoś inaczej!

EDIT2

Http://forums.wxwidgets.org/viewtopic.php?f=1&t=30983

Author: Stefano Mtangoo, 2011-08-03

6 answers

Jak właściwie zaimplementować to w C++

  • Spraw, by klasy odpowiedzialne za rendering nie wiedziały nic o szczegółach aplikacji. Nazwij je SomethingView classes to make this point clear

  • Spraw, aby obiekty domeny nie wiedziały nic o wizualizacji lub interakcji z użytkownikiem. Nie musisz nazywać ich modelką, ale możesz

  • Stwórz zestaw klas odpowiedzialnych za uruchamianie roli kontrolerów: przewodowe zależności do przeglądania i klasy modelu poprzez wtrysk zależności, jeśli to możliwe. przykład: CppInject. W każdym razie, klasy kontrolerów mogą wiedzieć zarówno o klasach modelu, jak i view, więc ważne jest to: wszystkie powiązania pomiędzy obiektami view I model są odizolowane od kontrolerów .

  • Oznacza to również, że całe programowanie w stylu imperatywnym powinno być ograniczone do klas kontrolera: view i model powinny być w stylu deklaratywnym. Oznacza to, że powinni zaoferować usługi związane z jego rolą, ale uniknąć bezpośredniej interakcji z innymi obiektami jako skutki uboczne

  • Nie jest prawdą, że należy zaimplementować komunikację pomiędzy sterownikami a innymi komponentami z systemem typu event, chociaż taki system jest zdecydowanie pomocny, ale na pewno nie jest wymagany

  • niespodzianka! powyższe odnosi się do każdego języka lub frameworka, z wyjątkiem oczywiście języków, które jakoś już zmuszają MVC do gardła od samego początku, tj.: ruby on rails

 22
Author: lurscher,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-19 19:43:57

MVC jest wzorcem projektowym, a nie konstrukcją specyficzną dla języka, więc tak, można go zastosować również do aplikacji C++.

MVC może i powinien być stosowany w dowolnym języku, aby Twój interfejs użytkownika był luźno połączony z backendem i można go zmienić przy minimalnym wpływie na siebie.

Wzorzec MVC zapewnia czyste rozdzielenie obiektów na:

  • modele {[9] } do przechowywania danych,
  • widoki do wyświetlenia całości lub części danych oraz
  • Kontrolery do obsługi zdarzeń wpływających na model lub widok (- y).
 8
Author: Alok Save,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-30 22:23:07

Tak, MVC można zastosować w C++. Na przykład framework MFC wykorzystuje architekturę dokumentu/widoku, która jest zasadniczo MVC.

Wzorzec projektowy nie jest biblioteką ani klasą. To wzór. Więc nie masz generycznej biblioteki MVC dla C++.

 4
Author: Armen Tsirunyan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-03 16:39:27

Użyj frameworka Tree Framework . TreeFrog Framework jest szybkim i pełnym stosem C++ framework do tworzenia aplikacji internetowych.

 3
Author: MaK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-27 19:00:44

MVC to architektoniczny wzorzec projektowy (tj. sposób oprogramowania budowlanego) powszechnie kojarzony z aplikacjami internetowymi, ale ma zastosowanie ogólnie do każdego projektu oprogramowania w dowolnym języku. Musisz zrobić trochę abstrakcji wysiłku na swój projekt, i określić, który kawałek oprogramowania należy do każdej części (tzn. GUI jest prawdopodobnie częścią widoku, itp.).

Zauważ, że ten Typ wzorca ma na celu głównie oddzielenie rozwinięcia , tak aby każda część projekt może być rozwijany niezależnie od innych. Może to być irytujące dla małej samodzielnej aplikacji, ale przydatne i satysfakcjonujące przy większych projektach.

 2
Author: ascanio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-03 16:56:41

Osobiście używam maszyn boost state dla sygnałów logicznych i boost do łączenia rzeczy ze sobą.

Napisałem mały przykład, który możesz przeanalizować tutaj: https://github.com/edubois/mvp-player

 -2
Author: Du Bois Eloi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-24 02:39:21