Gdzie powinienem umieścić metody, które wysyłają żądanie HTTP, aby uzyskać dane z usługi internetowej w fazie rozwoju iOS?

9

W mojej aplikacji na iOS mam model samochodu, w którym parametry takie jak nazwa, rok, wartość itp. Są pobierane z serwisu internetowego w celu wypełnienia listy danymi samochodów.

Gdzie powinienem umieścić metodę, która asynchronicznie idzie na serwer i zwraca tablicę samochodów (ta metoda już przekształca JSON w tablicę Car)?

Moje obecne podejście jest metodą statyczną w mojej klasie samochodów, która odbiera HttpClient (więc jestem w stanie przetestować jednostkę, kpiąc z klienta) i zwraca tablicę NSArray samochodów, czy to dobrze?

Co zrobiliście w tej sytuacji?

Martwię się, ponieważ ostatnio zacząłem czytać czysty kod, który mówi, że Klasa powinna robić tylko jedną rzecz, a sposób, w jaki ją mam, wydaje się teraz robić dwie rzeczy (przechowywać informacje o samochodzie i uzyskać listę samochodów).

Raphael Oliveira
źródło

Odpowiedzi:

4

Poleciłbym obiekt CarBroker, który obsługuje żądania dotyczące samochodów i udostępnia metody takie jak:

  1. getCars - do uzyskania listy wszystkich samochodów.
  2. getCarByID - dla konkretnego samochodu.

Ponadto taki obiekt może obsłużyć żądanie od innych brokerów samochodowych (w razie potrzeby). Tak czy inaczej, ma jeden prawdziwy zakres odpowiedzialności - pośrednictwo w samochodach - w przeciwieństwie do bycia obiektem samochodowym z obowiązkami obiektu samochodowego i brokera obiektów.

J-Boss
źródło
Brzmi dobrze, ponieważ teraz masz czysty obiekt samochodowy, który można ponownie wykorzystać. Co się stanie, jeśli zaczniesz używać innego protokołu dostępu do uzyskiwania danych? W tym scenariuszu musisz gdzieś zacząć, wiesz, że wszystko, co przetwarzasz \ reguły \ kod logiczny z jednej strony akceptuje obiekty Car. Następnie możesz rozpocząć ponowne wdrażanie CarBroker za pomocą REST lub cokolwiek, ale już jesteś w połowie drogi i nie musisz przeprogramowywać i ponownie testować logiki, która jest nieodłącznie związana tylko z abstrakcją samochodu .
Andyz Smith
1

Tutaj trzymanie innego obiektu powinno być przechowywane gdzieś, co nie może być zagwarantowane, że rodzic zawsze będzie żył, aby przetworzyć odpowiedź.

Sugeruję, aby zachować tę implementację w klasie singleton. Utrzymanie tej klasy przyda się również przy implementacji metod ogólnych, które można wywoływać bardzo często.

Oruvan
źródło
-1

Możesz wywołać metodę asynchroniczną w metodzie ViewDidLoad, gdy tablica powróci z sieci, odśwież widok. Możesz zapisać tablicę w bazie danych, więc nie będziesz musiał ładować danych z sieci za każdym razem, gdy ładuje się Viewcontroller.

Uczeń
źródło
3
Jak to odpowiada na zadane pytanie?
komara