Git Product home page Git Product logo

marvelheroes's Introduction

MarvelHeroes

Proyecto de prueba para mostrar conceptos de arquitectura de software.

Instalación:

Clonar el repositorio y, en el directorio del proyecto, ejecutar pod install.

Explicación de la arquitectura:

El proyecto está overengineered intencionalmente para mostrar la estructura de la arquitectura propuesta.

El objetivo de la arquitectura propuesta es separar por completo todas las responsabilidades del proyecto, de forma que pueda repartirse fácilmente el trabajo entre los desarrolladores.

Las pantallas se encuentran bajo el directorio Sections. El objetivo es que toda la funcionalidad de cada pantalla pueda ser desarrollada dentro del mismo directorio. Así, en el directorio de cada vista tendremos los siguientes elementos:

  • Vista: ViewController y su storyboard (si se usan storyboards)
  • Presenter: Maneja la lógica de presentación, recibe datos de los repositorios y los muestra al usuario. Recibe las interacciónes del usuario y las envía al router
  • Repositories: Repositorios de datos para presentar al usuario
  • Routers: Lógica de navegación, decide a dónde navegar a partir de una interacción del usuario
  • Openers: Deciden cómo se abre la pantalla, navegada, presentada, con transición, etc. Son protocolos con implementaciones por defecto
  • Assemblers: Gestionan las dependencias de las pantallas. Juntan los presenters, repositories y routers de cada pantalla, para generar el viewController a mostrar.

Esta estructura permite la reutilización completa de la lógica de presentación: Para una pantalla, se puede definir un nuevo assembler que use otro repositorio y otro router para cambiar la funcionalidad de la pantalla, sin cambiar su vista ni su presenter.

Tanto los repositorios, como los routers pueden hacer uso de los casos de uso, que encapsulan la lógica de negocio.

Rootwireframe es la clase encargada de conocer el estado concreto de la aplicación en todo momento. Es el que conoce el viewController que se está mostrando, y sabe a qué pantallas se puede navegar y cómo hacerlo. Para ello implementa todos los protocolos de los openers.

Los componentes de la capa de datos, como pueden ser gestores de comunicaciones, bases de datos, analíticas, etc. Se encuenntran en la carpeta Components

Próximos pasos:

La aplicación se entrega como un ejemplo básico. A partir de aquí se podrían implementar las siguientes funcionalidades:

  • Testing: Los casos de uso son demasiado simples de momento, por lo que no se han implemenntado tests. Idealmente cada caso de uso debería estar testado en un porcentaje cercano al 100%
  • Uso de base de datos: Idealmente, la carga de datos debería importarse en base de datos. Esto permitiría un correcto funcionamiento offline, y un acceso a datos (búsquedas, filtros, etc.) más sencillo.
  • Integración con rx: Se puede integrar algún framework de suscripciones para eliminar la relación Presentert -> Vista, y para simplificar el código.
  • Más funcionalidades: Buscar héroes, filtrar, listado de comics, etc.

marvelheroes's People

Contributors

gadaxara avatar

Watchers

 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.