Prawdopodobnie słyszałeś o rozróżnieniu między grubym modelem/cienkim kontrolerem a rozrzedzeniem cienkiego modelu/tłumika. Ostatnio usłyszałem, że możesz mieć coś pomiędzy tym, gdzie część logiki z modelu przechodzi w warstwę usługi. Jak powszechne jest to? i czy znasz (lub potrafisz wymyślić) jakiekolwiek prawdziwe przykłady, które je ilustrują?Czy warstwa usługi MVC + jest wspólna w zend lub PHP?
Odpowiedz
Martin Fowler opisuje wzór Service Layer swojej wspaniałej książki Patterns of Enterprise Application Architecture. Jeśli zależy Ci na pytaniach takich jak ten, o który prosiłeś, powinieneś przeczytać tę książkę.
Jednym z zastosowań, który przychodzi mi na myśl, jest zarządzanie transakcjami bazy danych. Niektóre osoby próbują hermetyzować transakcje rozpoczynające i zatwierdzające w swoich modelach domen. Ale potem stają się zdezorientowani, gdy modele domen wywołują inne modele domen, które również próbują uruchamiać i zatwierdzać transakcje db. Który model naprawdę decyduje, czy transakcja została zatwierdzona czy wycofana? A co robisz, jeśli dany model jest używany na różne sposoby przez różnych klientów?
Warunkiem usługi jest Warstwa usług, ponieważ jest to warstwa, na której można uruchamiać i zatwierdzać prace obejmujące wiele modeli domen.
Co do tego, jak powszechne jest to, nie sądzę, żeby było to powszechne. Większość ludzi używających Zend Framework (lub jakiejkolwiek innej frameworki PHP lub Ruby) ledwo przeniosło się z "Active Record rozwiązuje wszystko" do nowego lśnienia, "Data Mapper rozwiązuje wszystko". Wygląda na to, że ta społeczność uczy się tylko jednego nowego wzorca co pięć lat. Przez jakiś czas nie przejdą do warstwy serwisowej.
Re komentarz od @ktutnik:
Nie, wzór Warstwa usług różni się od wzoru Repository. Repozytorium polega na abstrakcyjnym dostępie do bazy danych, dzięki czemu można korzystać z bazy danych, takiej jak Kolekcja. Warstwa usług dotyczy hermetyzacji złożonych operacji aplikacji.
Innym sposobem myślenia o nich jest ich związek z Modelem Domeny. Repozytorium jest używane między Modelem domeny a bazą danych. Natomiast Warstwa Usług wykorzystuje jeden lub więcej Domeny Modele.
Service Layer ---> Domain Model(s) ---> Repository ---> DBAL
jeszcze jedna rzecz, która zwykle mnie myliła .. warstwa usług i repozytorium ... czy to to samo czy inne myślenie? dzięki – ktutnik
Service layer rzecznictwo jest stosunkowo nowe i wciąż podlega różnym interpretacjom. Myślę, że oznacza to posiadanie warstwy, która wykorzystuje wiele modeli domen, które kontrolery wywołują (może jednak upraszczam to za dużo). Niedawno opracowaliśmy internetową korzystające z tego i praktycznych korzyści, jakie napotykane są:
funkcje jak obsługa pomaga ze skalowalnością. Jeśli masz usługę obrazu, który początkowo korzysta z usług lokalnych zrobić to praca staje się łatwiejsza, aby ten punkt serwisowy do innego serwera lub jakiegoś 3rd party bez konieczności dokonywania zamiatanie aktualizacje
elastyczność. W połowie projektu postanowiłem zmienić podstawowy element funkcjonalności i mogłem to zrobić bezboleśnie; pozwalając mi szybko zważyć zalety i wady aktualizacji. Ta elastyczność jest przydatna w przypadku szybkiego prototypowania i wpaja pewną pewność, ponieważ jeśli potrzebujesz czegoś ponownie, nie będzie to koszmar.
Rozszerzalność. Zidentyfikowaliśmy już usługi w mojej aplikacji, które mogę przewidzieć w przyszłości dla innych programistów lub innych widgetów, aplikacji mobilnych.Teoretycznie jest to tylko kwestia dodania uwierzytelnienia i autoryzacji do usługi (ponieważ funkcje są już w jej własnej warstwie i nie muszę tracić czasu na próbę oddzielenia tego, co chcę ujawnić od reszty podstawy kodu).
Usługi są łatwe do dodania i upuszczenia (być może należy to do jednego z wcześniejszych punktów). Mam usługi specyficzne dla określonego etapu projektu (np. Zapraszam tylko na etap), które mogę zrezygnować po zakończeniu tego etapu.
Myślę, że ma praktyczne zalety i kluczem do sukcesu w realizacji jest dobry sposób na zarządzanie usługami w aplikacji. Używam symfony dependency injection component
Re # 2, czy możesz podać konkretny przykład tego, jak zmieniłeś ten element funkcjonalności (przed i po), aby łatwiej zrozumieć, w jaki sposób warstwa usług działa w praktyce? W punkcie 3 brzmisz, jakbyś mówił o interfejsie API, a # 4 brzmi jak system uprawnień. Nadal staram się zrozumieć, o co chodzi ta warstwa usługi i jak ją wykorzystać, więc może dlatego odrzucam te bardziej znane koncepcje. – jblue
2. Przełączałem się z użycia solr na mysql iz powrotem bez większego wpływu na moje modele lub kontrolery. (w gruncie rzeczy czekam na doktrynę do implementacji monobitów doktryny, aby trochę dojrzeć, zanim to zrobię i dlatego wspomniałem, że pomaga budować zaufanie.) – Akeem
3. Mówię o wykonywaniu niektórych z moich usług dostępne dla zewnętrznych twórców lub nawet własnych aplikacji mobilnych lub innych sposobów korzystania z treści.) – Akeem
See ZFEngine to CMF na ZF z warstwy usługa realizacji
- 1. Warstwa walidacji w wzorcu MVC
- 2. Gdzie powinny znajdować się moje modele? Warstwa sieci Web lub warstwa danych? (MVC + NHibernate)
- 3. Czy dostosowywanie usługi DispatcherServlet w Spring MVC jest powszechną praktyką?
- 4. Logowanie do MVC (Zend Framework)
- 5. PHP Zend Framework Generator
- 6. Architektura zorientowana na usługi - warstwa transportowa (http i wiadomości)
- 7. Jak zaimplementować protokół SSL w Zend MVC
- 8. Co to jest DAO i warstwa usługi dokładnie w Spring Framework?
- 9. W Zend Framework 2 RBAC lub ACL. Który jest zalecany?
- 10. Jak mogę lepiej zrozumieć warstwę usługi w symfony2 w php
- 11. Jak sprawdzić, czy plik jest ASCII lub Binary w PHP
- 12. Czy istnieje wspólna konwencja nazewnictwa pakietów lisp?
- 13. Używanie tabel Zend Framework Db bez MVC
- 14. ASP.NET MVC i usługi sieciowe
- 15. Czy wzór DataMapper łamie MVC?
- 16. Czy istnieje wspólna technika rysowania linii "rozciągliwej"
- 17. Jak sprawdzić, czy użytkownik jest zalogowany w Zend Framework?
- 18. Czy warstwa wejściowa powinna zawierać neuron obciążenia?
- 19. Warstwa PDF i tekst
- 20. Nie można uruchomić Zend Framework 2 na serwerze - nie można znaleźć klasy "Zend \ Mvc \ Application"
- 21. Standard kodowania PHP Zend Framework, który jest bardziej czytelny?
- 22. Struts vs Zend? Java vs PHP?
- 23. Zend Lucene czy sfinks?
- 24. Czy należy powielić sprawdzanie poprawności w mojej warstwie MVC i warstwie usługi?
- 25. Jak mogę sprawdzić, czy wniosek jest poczta w Zend Framework
- 26. Czy lepiej byłoby używać Asp.net mvc lub usług internetowych?
- 27. Usługi WWW Java - czy oś jest konieczna?
- 28. intrusive_ptr: Dlaczego nie jest udostępniana wspólna klasa podstawowa?
- 29. Czy MVC (lub MVP) może współistnieć z architekturą SOA?
- 30. PHP - Zend powiedzieć unikać magicznych metod?
HMVC? Hierarchiczny kontroler widoku modelu? – WalterJ89
@ WalterJ89 Aha, dzięki za słowo. Czy wiesz, kto wymyślił to przy okazji? – jblue
Nie jestem pewien, kto to wymyślił. Po prostu pamiętam to z dokumentacji KohanaPHP. http://kohanaframework.org/ Jestem zaznajomiony z MVC, ale część H wciąż jest na mojej liście tolearn. – WalterJ89