Giter VIP home page Giter VIP logo

transferlist's Introduction

Transfer List Logo

Description

This application is implemented using the MVVM (Model-View-ViewModel) pattern along with the Clean Architecture. It is structured into three separate modules: Data, Domain, and MediaListUIKit. These modules are organized in a Monorepo setup, managed using Swift Package Manager, and all the modules are kept within a single package.

The tech stack used in this project ๐Ÿ› 

  • UIKit
  • MVVM + clean architecture
  • Unit Test + MockURL
  • async / await (Structured concurrency)
  • Combine
  • Http client (Alamofire)
  • Image Cacher (Kingfisher)

Tools

  • Xcode 14.3.1
  • Swift 5.8.1

Screenshots ๐ŸŒƒ

List Detail
list detail

MonoRepo

In a Monorepo setup, multiple related projects are stored in a single repository, making it easier to manage and share code between them.
monorepo.tools

Modules

  • Data Module: Contains implementations related to repository, network, and local storage.
  • Domain Module: Consists of repository protocols, use cases, and entities.
  • MediaListUIKit Module: Contains Colors, Fonts, and views.

For more detailed information about each module, you can refer to the following links:

Data

Domain

UI

Clean Architecture + MVVM

  • Data Layer: This layer includes repository implementations, network-related components, and local storage handling.

  • Domain Layer: Here, you'll find repository protocol, use case (interactors), and entities that represent the core business logic and data structures.

  • Presentation Layer: This layer is divided into view models (ViewModels) and views (Views) responsible for presenting the user interface and handling the user interactions.

Presentation Layer

It's important to note that the Presentation layer is part of the main app and is not organized as a separate module.


In the Presentation section, the following key components are present:
  1. SceneDelegate: This class manages the application's lifecycle. It begins by registering the necessary fonts. It also creates the container required for Dependency Injection, which is utilized by the ViewModelFactory.

  2. DIContainer (Dependency Injection Container): This protocol is responsible for creating the desired use cases. It should be passed to view models that need these use cases.

    By implementing DIContainerImpl, we fulfill the DIContainer protocol, and this is where everything needed to construct use cases is assembled.

  3. ViewModelFactory: The purpose of this class is to create view models. It handles the creation of view models that may require specific use cases. In this scenario, views don't directly get involved in the construction of view models; instead, the ViewModelFactory takes care of it.

Diagrams

App Digram

Presentation Digram

Roadmap

  • Test
    • UITest cases.
    • Test plan.

Contributing ๐Ÿค

Contributions, issues, and feature requests are welcome! Feel free to fork the repository and submit a pull request with your changes.

License

Please check LICENSE for details.

transferlist's People

Contributors

helloitshessam avatar

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.