Jakie wzorce projektowe są najczęściej stosowane w aplikacjach webowych/korporacyjnych? [zamknięte]

Jakie są najczęstsze wzorce projektowe, które są używane w aplikacji Web / Enterprise i dlaczego są używane ?

Uwaga: odpowiedź na Dlaczego część powinna opierać się na liście problemów, które mają tendencję do rozwiązywania ?

Author: skaffman, 2010-01-10

9 answers

Często używam inwersji Sterowania .

W szczególności podczas utrzymywania / ładowania obiektów. Pomaga, gdy nie jesteśmy pewni, czy dane będą pochodzić z bazy danych, serwisu internetowego lub innego mechanizmu.

Używając interfejsu i pozwalając wielu źródłom na wystawienie prostego API do zapisywania / pobierania i pozwalając samemu obiektowi wiedzieć, które wywołania API mają zostać wykonane, otrzymujemy bardzo łatwą w zarządzaniu architekturę.

Jednym z przykładów jest tutaj .

 4
Author: NotMe,
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
2017-05-23 12:34:21

Wzór Singletona jest niezwykle powszechny. Jego podstawowym zastosowaniem jest upewnienie się, że nigdy nie tworzysz więcej niż jednego obiektu danego typu, co czyni go dobrym zamiennikiem zmiennych globalnych, które mają zdecydowanie złą reputację. Istnieją różne argumenty za i przeciw Singletonowi, a niektórzy twierdzą, że jest on tak samo zły jak zmienne globalne.

Używam go sam z szeroką grupą obiektów, które zazwyczaj nazywam "menedżerami". Na przykład: w dużej aplikacji, która wymaga kilku baz danych, nie chcesz otwierać wielu połączeń przez cały czas. Będę miał klasę DatabaseManager, która jest Singletonem i będzie wewnętrznie zarządzać połączeniami do każdej bazy danych. Konsumujący obiekt może wywołać metodę DatabaseManager::getConnection(), a zadaniem menedżera jest zapewnienie istnienia pojedynczego połączenia (otwarcie go, jeśli musi) i zwrócenie go do konsumującego obiektu.

To rozwiązuje problem przekazywania globalnej bazy danych połączenie wszędzie, z korzyścią uboczną efektywnego wykorzystania obiektów, ponieważ istnieje tylko jeden DatabaseManager. Wywołania statyczne oznaczają, że jest on dostępny dla każdego konsumenta, który go potrzebuje.

 2
Author: zombat,
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
2010-01-09 21:52:25

MVC

Model-widok-kontroler pozwala na niską spójność między logiką biznesową i warstwą prezentacji i to jest jego podstawowa wartość.

Zwykle każdy kontroler jest Servlet, który obsługuje żądania GET/POST dla pojedynczej strony, odpowiadając na nie, prezentując poprawny widok lub przekazując jurysdykcję innemu kontrolerowi.

Viwer zamienia dane, które kontroler przekazuje, w Html, Xml, JavaScript, JSON lub dowolną technologię, którą chcesz. Widz jest najbardziej często Servlet lub abstrakcji Servlet jak JSP, ASP, itp.

Model to specyficzna dla danej domeny reprezentacja danych, na której działa aplikacja. Może być również połączony z logiką domeny, która zapewnia znaczenie danych(np. obliczanie urodzin, sumy lub kosztów wysyłki za zakupy w Koszyku). Model powinien zawierać dane umożliwiające łatwy dostęp bez względu na podstawowe obiekty magazynowe.

Ze względu na niską spójność z MVC można zmieniać, rozwijać i testować każdy komponent niezależnie.

ActiveRecord

Ten jest często używany, gdy podstawowym mechanizmem przechowywania jest baza danych. Zasadniczo ActiveRecord oznacza, że wszystkie właściwości obiektu odpowiadają kolumnom w bazowej bazie danych i że każdy obiekt zawiera funkcje takie jak Insert, Update, Delete (I Load).

Więc każda klasa jest tłumaczona na tabelę lub widok, a każdy obiekt staje się wierszem w wspomnianej tabeli.

Powód jest to proste dzięki temu, że Twoje klasy implementują sposób dostępu i edycji bazy danych, które oszczędzasz na pisaniu dodatkowego kodu płyty kotła. To w połączeniu z popularnością baz danych wystarczy, aby ten wzór był interesujący.

Baseny

Innym często używanym jest Pools . PoolManager jest Singleton , który zarządza Resource (czy to baza danych, Metoda Fabryczna, czy połączenie). PoolManager przechowuje zestaw zainicjalizowanych kopii. Ilekroć inny proces lub obiekt prosi o zasoby poprzez PoolManager.acquire() otrzymuje jeden z obiektów z puli.
Następnie manipuluje swoją kopią zasobu i zwraca ją po zakończeniu za pomocą Resource.release(). Obiekt nie zostaje jednak zniszczony, zostaje jedynie zwrócony do basenu.

Pools są używane w celu zwiększenia wydajności.
Na przykład, jeśli istnieje metoda fabryczna, która ma kosztowne pobieranie (tzn. jest powolna w odpowiedzi), często jest zawinięta w instancje PoolManager i N są tworzone podczas inicjalizacji z dnia PoolManager. W ten sposób klienci nie czują, że fabryka bazowa jest powolna, ponieważ PoolManager ma dla nich hit wydajności.

 2
Author: Daniel Fath,
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
2010-01-09 23:29:14
 1
Author: iChaib,
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
2010-01-09 23:01:58

Jednym z powszechnie stosowanych wzorców projektowych przedsiębiorstwa jest Front Controller . Wymaga scentralizowanego punktu dostępu lub punktu wejścia. Używane przez frameworki J2EE, takie jak struts, jersey itp., więc deweloperzy mogą tego nie zauważyć.

 1
Author: rai.skumar,
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-17 09:46:38

Kontroler widoku modelu, używany do oddzielania logiki biznesowej od warstwy prezentacji w celu zmniejszenia niepotrzebnego ciasnego sprzężenia.
Zobacz więcej na c2.com lub wikipedia

 0
Author: crowne,
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
2010-01-09 21:50:37

Wzorce fabryczne, głównie factory_object i factory_method są bardzo powszechne,
np. DocumentFactory dla dokumentów xml.
Celem wzorca fabrycznego jest uproszczenie tworzenia obiektów.

 0
Author: crowne,
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
2010-01-09 22:22:11

Nie wiem od czego zacząć, ponieważ wzory znajdziesz wszędzie (w końcu, pod maską). Ale spróbujmy:

  • myślę, że większość(wszystkie?) Wykorzystanie frameworków MVC Kontroler przedni oraz Dowództwo [GOF] wzory.
  • w aplikacjach rozproszonych bardzo często używa się Session Facade (zaimplementowanej przy użyciu Session Beans w Javie), która opiera się na Fasada [GoF] wzór projektu.
  • ORMs wdrożyć jednostka pracy [poeaa] pattern (Hibernate 's Session, Toplink' s UnitOfWork, JDO ' s PersistenceManager w świecie Javy).
  • wciąż bardzo często używa się wzorca Data Access Object dla warstwy dostępu do danych. Abstract Factory [GoF] i Factory Method [GoF] są pokrewnymi wzorami.
  • etc, etc
 0
Author: Pascal Thivent,
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
2010-01-10 00:04:19

I found this usefull: http://misko.hevery.com/code-reviewers-guide/ nie chodzi o pytanie, które zadajesz, ale dotyczy niektórych wzorców projektowych wymienionych powyżej. Gorąco polecam lekturę książki w formacie pdf!

Hope this help

 0
Author: Plamen Paskov,
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-03-07 21:01:18