2012-01-08 8 views
25

¿Alguien puede recomendar una buena estructura de IoC para iOS para facilitar la inyección de dependencia?¿Marco de IoC recomendado para iOS?

El único que he encontrado hasta ahora es Objection Framework que aparentemente es similar a Guice (que desafortunadamente no me es familiar). ¿Es esta una opción común para iOS y existen marcos de competencia que vale la pena visitar?

+0

Lo he convertido en una respuesta. Imagino que mi respuesta es información oportuna, así que siéntete libre de cambiar la aceptación en el futuro cuando haya más marcos disponibles. –

Respuesta

15

... ¿hay marcos que valgan la pena verificar?

Objection es la biblioteca DI que pude encontrar en Google para iOS, por lo que puede ser pegado con él si quieres una biblioteca de pre-construidos.

DI no requiere específicamente un marco de trabajo. Si su aplicación es pequeña, puede simplemente crear todas sus instancias en la raíz de la aplicación e inyectarla a mano.

Si necesita más que esto, y las estructuras existentes no lo están recortando, puede rodar su propio localizador de servicios y luego construir un contenedor DI encima de él.

También podría portar un marco más pequeño existente desde otra plataforma. Hay varios "pequeños" en .Net, por ejemplo - Ninject y SimpleInjector.

¿Es esta una opción común para iOS ...?

Parece que es un proyecto bastante pequeño ya que solo hay un autor/colaborador en la lista. No hay muchos problemas archivados. Sin embargo, el mercado iOS es bastante grande. Así que estoy pensando que solo una pequeña parte de todos los desarrolladores de iOS usan esta biblioteca.

Pero esto no es necesariamente algo malo. Parece ser created, used, and supported by a small company. Ha tenido fairly steady updates for the past year.

Mi experiencia anecdótica con proyectos de código abierto de ámbito similar: no siempre obtengo nuevas características muy a menudo, y yo soy a menudo el que termina encontrando errores. Pero tiendo a obtener soporte en las características existentes establecidas muy rápidamente, y se presta mucha atención a los correos electrónicos de soporte que he enviado. YMMV.

+2

Sus observaciones acerca de la Objeción son precisas y justas. De lejos, soy el mayor contribuyente al proyecto, lo que significa que generalmente agrego las características que necesito o estoy inspirado para hacer. Respondo a los errores muy rápidamente. Sin embargo, tiendo a masticar solicitudes de funciones durante bastante tiempo porque quiero asegurarme de que la identidad de Objeción no sea pérdida y no se "infle". La objeción se ha usado en aplicaciones relativamente populares. En función de los registros de bloqueo asociados y de las pruebas de rendimiento que realicé, no ha sido la causa de un bloqueo o un cuello de botella de rendimiento. – justice

+2

Una última cosa. La objeción está muy bien probada: https://github.com/atomicobject/objection/tree/master/Specs – justice

+0

@justice: ¿Tiene una lista de las aplicaciones en las que se ha utilizado? Puede ayudar el anuncio de la biblioteca para que la gente sepa de ellos (en el sitio, por supuesto, enumerarlos aquí no sería kosher). Probablemente necesitaría obtener permiso. Pero los testimonios tienden a ayudar a responder preguntas como "¿Qué tan popular es esta biblioteca?" y ayuda a atraer nuevos usuarios. –

12

Bueno, espero que me perdones un pequeño tapón de aquí, pero me acaba de publicar mi propio marco DI para Objective-C: Jeringa

https://github.com/tomekc/Syringe

Es simple y ligero a propósito, mi el objetivo principal era hacerlo lo más discreto posible. Tengo un fuerte conocimiento de Java, así que lo diseñé después de Google Guice y Spring.

+2

+1 por la recomendación, incluso como un enchufe. Si quieres comenzar de una buena manera para presentar a las personas a DI (ya que es un concepto bastante inexplorado en el mundo de Objective-C), echa un vistazo a [la página wiki de "Iniciando" de NInject] (https: // github .com/ninject/ninject/wiki/Getting-Started).NInject se centra en la inyección de constructores en lugar de la inyección basada en atributos, pero la forma en que sus tutoriales desarrollan los conceptos DI funciona bien. –

+0

Amor! Tan entusiasmado como yo acerca de la Objeción, prefiero cómo automatizar el cumplimiento. Sin embargo, la objeción aún proporciona un poco más de flexibilidad. ¿Qué hay de las propiedades? ¿Pretendes crecer la jeringa? – Texas

+0

Actualmente lo uso en mis pequeños proyectos privados, y estoy abierto a escuchar algunos comentarios de los usuarios. –

21

Typhoon

Typhoon-website Las listas de las características clave. Un resumen rápido:

  • No invasivo. No se requieren macros o XML. La configuración se realiza utilizando un Objective-C or Swift API que aprovecha el tiempo de ejecución de Objective-C.

  • Ligero. Solo 2500 líneas de código. Tiene una huella muy baja, por lo que es apropiado para dispositivos con limitaciones de CPU y memoria. Ajustado para el rendimiento.

  • Hace que sea fácil tener múltiples configuraciones de la misma clase base o protocolo.

  • Sin cadenas mágicas: admite la refactorización IDE, la finalización del código y la verificación en tiempo de compilación.

  • Admite la inyección de controles de visualización y la integración del guión gráfico.

  • Admite la inyección de inicializador y propiedad, además de la gestión del ciclo de vida.

  • Potentes funciones de administración de memoria. Proporciona objetos preconfigurados, sin la sobrecarga de memoria de los singletons.

  • Excelente soporte para dependencias circulares.

  • probado en batalla: se utiliza en todo tipo de aplicaciones con aplicaciones de la tienda de aplicaciones.

  • Un equipo central de distribución internacional (incluso un seguimiento de stackoverflow), por lo que el apoyo a cualquiera de sus preguntas nunca están lejos :)

API Docs y aplicaciones

+3

La única opción con una comprensión real de lo que es DI. Gracias Jasper! –

+1

@Jasper Blues He investigado este y otros marcos DI. Todavía no obtengo el beneficio de usar esto o hacerlo manualmente incluso después de leer el documento. El uso de este o cualquier marco parece tan pesado y no carece de costo. ¿Puedes aconsejar? – Boon

+0

@Boon Suena como una buena pregunta para StackExchange. –

Cuestiones relacionadas