Giter VIP home page Giter VIP logo

feedbackapp-ios's Introduction

FeedbackApp-iOS

Features

Colleagues List:

  • Show list of colleagues
  • Give specific colleague a feedback

Colleague Profile:

  • Show selected colleague profile (name, profile image)
  • List all interactions if any

Screenshots

Requirements

  • iOS 9.0+
  • Xcode 9.1+

Dependency Manager (CocoaPods)

FeedbackApp uses CocoaPods as a dependency manager and dependecies are not uploaded to github so to install dependencies run pod install

Pod Usage
Marshal Mapping JSON data to the application models.
Kingfisher Loading and caching images.
Quick Behavior-driven development framework for testing
Nimble A Matcher Framework

Architecture (VIP + Clean Architecture)

The app is splitted into 3 main targets to force modularization and clean architecture rules.

FeedbackAppDomain:

This target represents the application domain and contains the implementation of the system main models.

Name Usage
User Represents system user entity
Feedback Represents system feedback entity

It also defines the system use cases in an abstract way. Currently, we have three use cases:

  • Fetch colleagues
  • Give a specific colleague feedback
  • Fetch colleague data

FeedbackAppFileStore:

This represents the platform layer, which includes concrete implementation of the previous use cases.

Fetch colleagues:

It loads data from .json file included in the target.

Give a specific colleague feedback:

Currently it doesn't persist changes to the file.

Fetch colleague data:

It relies on the implementation of fetch colleagues use case, in order to query the data.

FeedbackApp:

The application layer is structured by VIP Architecture. It has three main components:

View

It has two rules:

  • Presenting the data on the screen
  • Delivering user interactions to the interactor

Interactor:

It is responsible for performing the business logic by using helper objects called Workers instead of handling everything in the interactor.

Workers are shared accross the application and know how to interact with the platform layer to fetch or persist data. Hence, if multiple screens implements the same use case, we can just reuse these workers.

Upon worker results, the interactor creates response object and pass it to the presenter.

Presenter:

It is responsible for the presentation logic. Anything that is related to data formatting and restructuring is done in the presenter before passing the data to the view to display it.

Communication between scenes is handled by routers which is responsible for routing and injecting the data to the destination scene.

There are also configurators which are responsible for building, injecting dependencies and configuring application scenes.

Improvements

  • Add Realm as another platform to persist the data.
  • Increase test coverage. Current: 90% coverage

Notes and Assumptions:

  • Giving feedback doesn't persist the data, hence show colleague profile scene depends only on the data injected to it by colleagues list router.
  • I didn't make any assumptions about the order of the given data.

feedbackapp-ios's People

Contributors

ahmad-elassuty avatar

Stargazers

T~ avatar

Watchers

James Cloos avatar  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.