Written some explanations on how I built the exercise in the README file.

This commit is contained in:
Javier Cicchelli 2024-03-22 16:47:58 +01:00
parent c150b88ddc
commit ac87bb25e5

View File

@ -1,6 +1,6 @@
Test assignment for the iOS Developer position. # Reviews app
Reviews app ## Assignment instructions
1) Make a small app that has our review feed. 1) Make a small app that has our review feed.
2) Add the possibility to filter by number of stars. 2) Add the possibility to filter by number of stars.
@ -17,3 +17,14 @@ Feel free to change all the provided code if you want to. Its there only to s
We expect to see a simple app but the one which is ready to be scaled up. Let's keep in mind more screens, user flows and services (e.g. Google Store reviews for example) which supposed to be added to the app in future. We expect to see a simple app but the one which is ready to be scaled up. Let's keep in mind more screens, user flows and services (e.g. Google Store reviews for example) which supposed to be added to the app in future.
If you have any questions or doubts make your own assumptions. But please convey the reasoning to us (code comments, documentation, some other way). If you have any questions or doubts make your own assumptions. But please convey the reasoning to us (code comments, documentation, some other way).
## Explanations
Based on the given requirements and provided source code, I built my [implementation](https://dropbox.rock-n-code.com/ing/app-reviews-final-20240322.MP4) on top of what was given with an iterative/incremental, bottom-to-top approach. In a nutshell, I started by implementing the each and every library first, then I built the framework that contains the "feed" feature, to finally present the mentioned feature in the app.
From a technical point of view, I decided to use the provided `UIKit` app provided to built this exercise, as a way to simulate an established, battle-tested app built before the "SwiftUI era" like, for example, the ING banking app. In addition, the platform of choice to make the deliverable for the exercise is, for obvious reasons, `iPhone`; and the minimum target platform was changed to `iOS 14.0` to simulate the current minimum iOS requirements from the existing ING banking app. This change not only allowed me to make use of the existing UI implemented in the given view controllers, but also build new UI components and/or views with `SwiftUI` and, integrate them into the provided view controllers.
The chosen architecture for this solution is `MVVM-C`, with some `Combine` reactiveness in the view models. As easily seen in the folder structure, and to answer to the scalability requirements mentioned above, the source code is clearly divided into 3 main sections:
1. **Libraries**: every single-purposed, clearly defined library built to implement the solution, implemented and (unit and/or preview) tested as independent `SwiftPM` packages.
2. **Frameworks**: every clearly defined and cohesive group of views and view models that conforms particular features, implemented and (unit and/or preview) tested as `Framework` targets in the project.
3. **App**: ideally, the place where the features frameworks are glued together cohesively with some help from the libraries, resulting in the app deliverable.