mvc objective-c iphone cocoa-touch model-view-controller

objective-c - mvc - cocoa touch ios



ConfiguraciĆ³n/diseƱo simple MVC? (2)

Solo quiero asegurarme de que voy en la dirección correcta con la forma en que se construye una aplicación MVC simple.

// MODEL @interface Reactor: NSObject { NSNumber *temperature; NSString *lastInspection; NSNumber *activeRods; }

.

// CONTROLLER @interface viewController: UIViewController { UITextField *tempTextField; UITextField *inspectTextField; UITextField *activeTextField; Reactor *reactor; } @property ... ... -(IBAction)ButtonPressed; @end

.

¿Estoy en lo cierto al declarar el reactor (modelo de datos) en el controlador? Tal como lo veo, el controlador se encuentra entre [VIEW] y [MODEL], por lo que necesitará enlaces a ambos.

[VIEW] está vinculado a través de "IBActions" a los métodos implementados en [CONTROLLER] que a su vez envía mensajes a los métodos en [MODEL]. El [MODELO] hace cualquier manipulación de procesamiento / datos necesaria, enviando los resultados requeridos de vuelta al [CONTROLADOR] que a su vez puede usarse para actualizar [VISTA].

¿Suena sensato, en términos simples?

Gary


Tiene razón, el modelo debe almacenar todos sus objetos relacionados con la empresa y se pueden MODIFICAR a través del controlador, la vista hace llamadas en el controlador en función de las acciones del usuario.


Puedes arriesgar esto por un modelo muy pequeño y simple, pero no debes desarrollarlo como un hábito porque este método se descompondrá a medida que tus proyectos crezcan.

¿Qué sucede cuando tienes una aplicación de dos o más vistas que toman datos dentro y fuera del modelo? ¿Qué sucede cuando tienes una aplicación con múltiples vistas y obtiene datos de una URL? ¿Qué sucede si desea utilizar el modelo de datos en un html o incluso en una interfaz de línea de comandos? ¿Qué sucede cuando quieres usar el modelo de datos en otra aplicación?

Si vas a escribir un código serio que tendrá miles de usuarios, múltiples versiones y posiblemente derivaciones, debes desarrollar buenos hábitos desde el principio.

El mejor método para un modelo de datos es crear un singleton para mantenerlo. Sugeriría crear una clase singleton genérica y luego hacer que su modelo para cualquier proyecto en particular sea una subclase de esa clase. De esta forma, tendrá un modelo limpio que se puede acceder desde cualquier lugar de su aplicación.

El segundo mejor método es estacionar el objeto del modelo de datos en el delegado de la aplicación. Sin embargo, eso puede volverse difícil a medida que el proyecto escala.

Ciertamente, no ayuda el hecho de que cada pieza de información instructiva / tutorial que he visto ignore el modelo de datos a favor de enseñarte cómo hacer las delicias de la interfaz. Los modelos de datos son simplemente matrices simples o algunas de ellas tachonadas al costado de un controlador.

Créanme, no quieren la pesadilla de crecer y hacer crecer su aplicación solo para descubrir que la lógica y los datos de su modelo de datos están dispersos en una docena de controladores de vista. Aprieta los dientes y hazlo bien desde el primer momento y nunca más tendrás que sudar.

Edit01:

Singleton, tendré que investigar un poco, ¿puedes explicarme un poco cómo accederías al [CONTROLLER]? Solo curiosidad por si el [MODELO] vuelve a entrar en AppDelegate, ¿cómo lo accederías desde [CONTROLLER]?

Usted estaciona un modelo de datos en el delegado de la aplicación al (1) hacer que el objeto del modelo de datos sea una propiedad del delegado de la aplicación y (2) usar el formulario de referencia global para el delegado de la aplicación:

MyDataModelClass *theModel=[[UIApplication sharedApplication] delegate] dataModelProperty];

Crear un singleton es un poco más complicado . Lo usa como si usara NSFileManger. Usted lo haría de la misma manera.

NSFileManger *fm=[NSFileManager sharedInstance];

Esto asegura que solo un administrador de archivos esté activo en una aplicación. Llamarías al modelo de datos de la misma manera desde un controlador:

MyDataModelClass * theModel = [MyDataModelClass sharedInstance];

Si diseña cuidadosamente el objeto del modelo de datos de manera que tenga control total sobre la información que se le escribe, puede usarlo de manera segura en cualquier lugar sin tener que preocuparse de que sus datos sean destruidos por una línea de código descuidada.