Robię dość złożoną aplikację emberjs i wiążę ją z zapleczem API.EmberJS: Dobre rozdzielenie obaw dotyczących modeli, sklepów, kontrolerów, widoków w dość złożonej aplikacji?
Wywołania API zwykle nie są powiązane z żadnym konkretnym modelem, ale mogą zwracać obiekty różnych typów w różnych sekcjach odpowiedzi, np. Wywołanie funkcji API zdarzeń zwróci zdarzenia, ale zwróci także zasoby multimedialne i osoby zaangażowane w te zdarzenia.
Właśnie rozpocząłem pracę nad projektem i chciałbym uzyskać porady ekspertów na temat tego, jak najlepiej rozdzielić zapytania, aby uzyskać czystą i łatwą do utrzymania podstawę kodu.
The Way I Am zbliża to:
- modele: zasadniczo obsługiwać rekordy ze swoich pól i innych właściwości komputerowej. Modele nie są jednak odpowiedzialne za składanie wniosków.
- np. Indywidualne, wydarzenie, zdjęcie, wpis itp.
- Sklepy: Są to głównie skrytki. Na przykład:
eventStore
będzie przechowywać wszystkie zdarzenia odebrane z serwera do tej pory (z możliwych różnych żądań) w tablicy, a także w hashu wydarzeń indeksowanych przezid
.- np. individualStore, eventStore itp.
- Kontrolery: Są powiązane z zestawem powiązanych wywołań API, np. eventsController będzie odpowiedzialny za pobieranie zdarzeń lub określonego zdarzenia, lub tworzenie nowego wydarzenia itp. Będą "trasować" odpowiedź do innej
stores
w celu późniejszego pobrania. Nie zachowują odpowiedzi po przesłaniu jej do sklepów.- np. eventsController, userSearchController itp.
- Widoki: Są powiązane z określonym widokiem. Ogólnie moja aplikacja może mieć kilka widoków w różnych miejscach, np.
latestEventsView
na pulpicie nawigacyjnym oprócz posiadania osobnej strony wydarzeń. - Szablony: są tym, czym są.
Często moi szablony wymagają wiązać się bezpośrednio do sklepów (np peopleView
chce wymienić wszystkich osób w individualStore na liście posortowane według pewnej kolejności).
I czasami wiążą się właściwości komputerowej
alivePeople: function() { ... }.property('[email protected]'),
różnych filtrowanie i opcje sortowania „wybrane” w widoku, należy wrócić różnych list ze sklepu. Możesz zobaczyć moje ostatnie pytanie pod adresem what is the right emberjs way to switch between various filtering options?
Kto powinien zrobić to filtrowanie, sam widok lub sklepy?
Czy ten rodzaj wiązania w poprzek warstw, czy zapach kodu? Czy rozdzielenie spraw jest dobre, czy też czegoś brakuje? Czy kontrolerzy nie powinni robić tutaj czegoś więcej? Czy moje poglądy bezpośrednio wiążą się ze sklepami?
Dowolny szczególny przypadek MVC bardziej odpowiadający moim potrzebom?
Aktualizacja 17 kwietnia 2012 Moje badania trwa, szczególnie z http://vimeo.com/user7276077/videos i http://jzajpt.github.com/2012/01/17/emberjs-app-architecture.html i http://jzajpt.github.com/2012/01/24/emberjs-app-architecture-data.html
Niektóre problemy z mojego projektu, że zorientowali się, to:
- kontrolery (making żądań sklepy lub modele lub coś innego powinno to robić, a nie kontrolery)
- Brakuje wykresów statystycznych - są one ważne dla interakcji widok-kontroler (Po jakimś czasie okazuje się swoimi interakcje nie są bardziej proste)
Jest to dobry przykład wykresów państwowych w akcji: https://github.com/DominikGuzei/ember-routing-statechart-example
UPDATE 09 stycznia 2013
Tak, to był długi, ale to pytanie ma ostatnio wiele wyświetleń i dlatego chciałbym je edytować, żeby ludzie mieli poczucie.
Krajobraz Ember bardzo się zmienił od czasu sformułowania tego pytania, a nowe guides zostały znacznie ulepszone. EmberJS wymyślił konwencje (takie jak Rails), a MVC jest teraz znacznie lepiej zdefiniowane.
ktoś nadal mylone powinien przeczytać wszystkie prowadnice i obejrzeć kilka filmów: Seattle Ember.js Meetup
Obecnie jestem modernizacji mój wniosek do Ember.js 1.0.0-pre2
.
Pracowałem przez wiele z tych samych typów pytań. powiązane: http://stackoverflow.com/questions/10045619/controller-strategy-garbage-collection-destroy –
czy używasz danych ember? –
I znowu, tego rodzaju informacje są tam, gdzie EmberJS obecnie brakuje. Zacząłem pracę z EmberJS tylko wczoraj i dosłownie byłem sfrustrowany aż do momentu, w którym wyrywałem włosy, ponieważ nie ma absolutnie nic o tym, jak należy ustawić EmberJS i za co odpowiada każdy rodzaj obiektu - a przynajmniej: jest bardzo trudne znaleźć. –