2013-08-08 1 views
0

Dans l'excellente bibliothèque mvvmcross je peux utiliser RIO lier pour empêcher le code illisible:utilisant SQLite net MvvmCross

public INC<String>Title = new NC<String>(); 

Je peux lire et écrire des valeurs en utilisant Title.Value. Rend les modèles beaucoup plus lisibles. En général, cette propriété s'écrit: private string _title;

public string Title 
    { 
     get { return _title; } 
     set 
     { 
      _title = value; 
      RaisePropertyChanged("Title"); 
     } 
    } 

Mais quand je veux utiliser SQLite-net, ces champs ne peuvent pas être diffusés en continu à la base de données, car ils ne sont pas les types de base avec un getter et setter.

je peux penser à quelques options comment se déplacer que:

  1. Faire un nouvel objet simple qui est similaire au modèle, mais seulement avec les directs db-champs. Et créez une méthode simple d'importation-exportation statique sur le modèle. Cela pourrait également éviter de lutter avec le code-modèle complexe qui n'a jamais besoin de se rapporter à la base de données réelle.
  2. Faites en sorte que sqlite-net comprenne la lecture des champs NC. J'ai lu dans le code du mappeur, mais il semblerait que cela va être beaucoup de travail, car il repose sur le getter-setter. Je n'ai pas trouvé un moyen d'insérer un mappage personnalisé dans un type, qui pourrait être générique. Enlevez RIO et mettez simplement tout le code moi-même au lieu de compter sur RIO.

Peut-être quelqu'un a-t-il des conseils?

+0

Les trois de vos options semblent être tout ce que je peux penser aussi. le défi technique de la seconde semble intéressant, mais de «l'app est roi» angle, je serais probablement aller pour le premier. Séparer les champs ViewModel des entités stockées dans le modèle/la base de données peut également vous éviter des maux de tête à long terme. (Tout ce commentaire est une opinion personnelle!) – Stuart

Répondre

1

Merci Stuart. C'était exactement ma pensée, donc je l'ai implémenté de cette manière: mes modèles (DB) ne contiennent pas de RIO. Seuls mes viewmodels le font, et ils font référence à un modèle compatible DB. Donc, pour la postérité, les conseils suivants: - N'utilisez pas RIO dans vos modèles qui doivent être sauvegardés dans une base de données. - Modèles de référence dans vos viewmodels. Dans la liaison, vous pouvez utiliser le. (point) pour référencer ce modèle.

Cela les garde bien séparés. Cela vous donne aussi un autre avantage: si vous avez besoin de réutiliser un modèle (parce que le même objet peut être affiché deux fois sur l'écran), mais dans des circonstances différentes, il est beaucoup plus facile de gérer ces situations pour trouver ce modèle déjà instancié.