¿Cuál es la mejor manera de pasar datos entre vistas?

He hecho algunas investigaciones y todavía no he encontrado una solución que parezca correcta, de una manera "de mejores prácticas".

Estoy trabajando en una aplicación para iPhone usando Xamarin. Esta aplicación será solo para iPhone inicial, pero hay planes para hacer versiones para Android y Windows Phone en un futuro próximo.

Esta aplicación crete / guarda un "momento". Este momento tiene algunas fotos más información. Básicamente, este momento se utilizará en toda la aplicación, se ha incrementado con más datos de muchas vistas. Si bien guardo este momento en algún tipo de repository (SQL, sistema de files, …, todavía tengo que implementar esto), necesito que esté vivo a través del flujo de trabajo.

Una forma de hacerlo sería:

var moment = new Moment() // .. add infos from view to moment nextView.Moment = moment; PerformSegue(...); 

¿Es esta la manera correcta de hacerlo? No hay ningún patrón que pueda usar para resolverlo desde todas las plataforms y controlar mejor cómo pasar esta información entre las vistas (se apreciarían las muestras)?

Podría usar el patrón Singleton para get acceso a sus datos en todos los puntos de su aplicación.

Echa un vistazo a la página Wiki (con una muestra): http://en.wikipedia.org/wiki/Singleton_pattern

Generalmente paso los datos como un argumento en el constructor de la vista, luego dentro de la vista mantengo una reference a ella como una variable local.

Sin embargo, si está utilizando la misma información global a través de su aplicación, podría ser mejor usar Singleton, o simplemente una class estática.

Es posible que haya visto que incluso Apple está usando el patrón singleton para acceder a la instancia de la aplicación actual para abrir la URL, es solo un ejemplo.

 UIApplication.ShanetworkingApplication.OpenUrl(urlToSend) 

Entonces, en su caso Singleton es la elección correcta, asegúrese de no poner todo aquí porque es un éxito .

así que usa singleton cuando no tengas otras forms de hacerlo.

Aquí está mi código de security de subprocess de ejemplo para hacer la class singleton

 using System; namespace MySingletonPattern { sealed class Singleton { //To make the thread safe access we need an instance private static readonly object _lockObj = new object(); //Lazy initialisation for the real instance private static volatile Singleton _instance; private Singleton() { } static internal Singleton Instance() { if (_instance == null) { //To make the access Thread safe lock(_lockObj) { if(_instance == null) { //Creating the instance of singleton class and this will be re-used _instance = new Singleton(); } } } return _instance; } } } 

Aquí es cómo usarlo

 Singleton obj1 = Singleton.Instance(); 

Si creas un singleton, puedes acceder a él desde cualquier lugar de la aplicación. Creación de singleton en ios, utilizando un método estático:

 + (Moment *)shanetworkingInstance { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ shanetworkingObject = [[self alloc] init]; }); return shanetworkingObject; } 

Tienes razón, Singleton parece ser la mejor opción.

Para futuras references, mi class de singleton:

 public sealed class CurrentMoment { private static CurrentMoment s_instance; //private Moment m_moment; private CurrentMoment() { } public static CurrentMoment Instance { get { if (s_instance == null) s_instance = new CurrentMoment(); return s_instance; } } /// <summary> /// Gets or sets the moment. /// </summary> /// <value>The moment.</value> public Moment Moment { get; set; } } 

No hay ningún patrón que pueda usar para resolverlo desde todas las plataforms y controlar mejor cómo pasar esta información entre las vistas (se apreciarían las muestras)?

No estoy seguro de cuál es su flujo de trabajo. ¿Sería posible que fuera atómica dentro de una plataforma? Es decir, si el usuario Fnetworking tiene una tableta Android y un iPhone, ¿no va a crear un momento en una plataforma y terminar el flujo de trabajo en el otro?

Si es así, guárdelo en el model (la parte de la aplicación que es independiente de las plataforms iOS, Windows Mobile, Android). Esta es la separación básica de model de vista, si sus vistas cambian con diferentes plataforms. El singleton para CurrentMoment propuesto por Giusepe tiene sentido para mí.

Si el flujo de trabajo no es "interrumpible" entre plataforms, no se moleste con un CurrentMoment persistente.

También puede ampliar la class de aplicación

 public class HelloApplication : Application { public static int GlobalVariable = 1; }