Weather Forecast Assigment – iOS – MVP + Clean Architecture
Description
Weather Forecast Assigment is an iOS application built to highlight MVP (Model View Presenter) and Clean Architecture concepts
Run Requirements
- Xcode 12+
- Swift 5
High Level Layers
MVP Concepts
Presentation Logic
View
– delegates user interaction events to thePresenter
and displays data passed by thePresenter
Presenter
– contains the presentation logic and tells theView
what to presentConfigurator
– injects the dependency object graph into the scene (view controller)
Clean Architecture Concepts
Application Logic
UseCase / Interactor
– contains the application / business logic for a specific use case in applicationEntity
– plainSwift
classes / structs
Gateways & Framework Logic
Gateway
– contains actual implementation of the protocols defined in theApplication Logic
layerPersistence / API Entities
– contains framework specific representations
Assignment Application Details
- Overview what I have to do in the assignment application:
- Load data weather, display on view.
- Check search input to make sure the keywords more than three characters berfore trigger search request.
- Check if search request have from Cache (CoreData) before request to the server. This to prevent the request calling to the server at the same time with same request.
- Make new search request to get newest data from server.
- Hande error from server response.
- Store the request & response to CoreData.
- Accessibility supports:
- Scaling text if supported to change the font size.
- The screen reader is enable by VoiceOver.
- Following MVP-Clean Architecture, I have been written:
WeatherPresenter
– Return weather data to display on screen, valid input,…SearchWeatherUserCase
– Referenced withWeatherPresenter
to process the search weather by city name feature, it manipulatesWeathers Entity
and comunicates withWeatherGateway
to retrive / persist the weathers entity.WeatherGateway
– Implementation of the protocols defined from Use Cases layer.ApiWeatherGateway
– Using URLSession to request data from server.LocalPersitenceWeatherGateway
– Using CoreData to fetch weather data storaged.
Weather
entity – Contains specific representations, includes:ApiWeatherRequest
,ApiWeatherResponse
,Weather Entity
from CoreData.
ToDo
- Unit Tests
- UI Tests
Check List
- The application is a simple iOS application that is written by Swift.
- The application is able to retrieve the weather information from OpenWeatherMaps API.
- The application is able to allow user to input the searching term.
- The application is able to proceed searching with a condition of the search term length must be from 3 characters or above.
- The application is able to render the searched results as a list of weather items.
- The application is able to support caching mechanism so as to prevent the app from generating a bunch of API requests.
- The application is able to manage caching mechanism & lifecycle.
- The application is able to handle failures.
- The application is able to support the disability to scale large text for who can’t see the text clearly
- The application is able to support the disability to read out the text using VoiceOver controls.