Git Product home page Git Product logo

codechallengue's Introduction

Code challengue

Solstice code challenge for recruiting at iOS positions. You can find the requirements of this exercise in the pdf placed at the root of the repo.

Technologies

Some frameworks were included in this project in order to speed up the process:

Instalation process is straight forward: first install Cocoapods using the terminal by executing:

$ sudo gem install cocoapods

After the project has been cloned, proceed to open a terminal on the root folder and run

$ pod install

And that's it. Everything should run smoothly.

Reasoning

  • MVVM and SOLID were at the heart of this development, always favoring composition over inherence (that's why you can see so many files for such a "small" project). It was lego oriented design ๐Ÿ˜
  • Little example of how the first view behaves (Mermaid is required In order to properly show it)
sequenceDiagram
Note left of ListViewController: This class reacts to<br/>events and renders<br/> accordingly. ONLY<br/>that

ListViewController ->> NetworkLayer: Hey, got some data for me?
NetworkLayer -->> ListViewController: Here you go
ListViewController ->> ContactsDataSource: Here's the data. Please render it
ContactsDataSource --> UserViewModel: Time to work guys!
  • Cache policy is simple: if the response is successful store it, otherwise use placeholder image from now on.
  • Use of StackViews wherever possible to laverage its flexibility and layout power.

Considerations

There were tradeoffs in every major design decision behind the development. While it is true that SOLID principles are at the core of every choice made here, no peace of software is ever complete so there might be minor duplicated here and there for speeding sake. Some notes can be found across the project explaining the shortcomings of those implementations.

Things to improve

You might find odd for me to include this section since it looks like I'm sabotaging myself. The intention here is to acknowledge the things that, most likely due to lack of time, remain pending. Just to mention a few:

  • Implement coordinators instead of instantiating and pushing details view controllers from main list controller.
  • Add unit testing
  • Remove minor duplications on image network calls and cell dequeuing
  • Abstract hardcoded strings into plist or centralized struct for instance.

Final notes

Hope I made myself clear in all of my intents. Looking forward to any feedback!

Regards.

codechallengue's People

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.