2010-08-13 6 views
0

J'ai une ListActivity qui liste un tas de "choses". Si vous cliquez sur l'une de ces "choses", vous êtes redirigé vers une autre ListActivity qui liste un tas de "trucs" pour cette "chose". Dites que je veux donner à l'utilisateur la possibilité d'éditer le nom de certaines «choses»; ou même supprimer certains "trucs". À quel moment dois-je effectuer cette action sur ma base de données? Ex: Si une ligne de "substance" est supprimée, la base de données doit-elle être mise à jour avant que je retourne mon utilisateur à la liste des "choses?" Ou l'utilisateur devrait-il revenir à la liste des «choses» et la base de données est mise à jour? Ou n'est-ce pas important?Petite question d'architecture

Rappelez-vous que la mise à jour de la base de données se produira probablement dans un service (j'appellerai également un service Web pour mettre à jour le nuage).

+2

Remplacer "choses" avec les parents et "stuff" avec l'enfant et ce sera beaucoup plus facile à lire. – jball

Répondre

1

Je ferais la transaction de base de données après l'utilisateur est fini de jouer avec lui, seulement parce que je voudrais leur donner un moyen d'annuler une suppression accidentelle avant de le commettre à la base de données.

Editer: Voir la réponse de jball. Il t'a compris mieux que moi.

+0

Oui, bien sûr, mais ce n'est pas vraiment ce que je suggère. Peut-être que je devrais être plus clair: Devrais-je mettre à jour la base de données juste avant d'appeler "finish()" ou devrais-je frapper la base de données après que la liste parente obtienne le résultat. – Andrew

+0

Je pense que c'est la bonne approche. Les incohérences de base de données sont inévitables. Ce qui est approprié est de minimiser le trafic de bande passante inutile. – Andrew

1

Cela dépend de ce qui est important dans votre application. S'il est important qu'un utilisateur ne pense jamais qu'un enfant est supprimé lorsqu'il ne parvient pas à supprimer, vous devez attendre d'obtenir une réponse du serveur avant d'afficher la nouvelle liste d'enfants à l'utilisateur. Toutefois, si la confirmation de la suppression n'est pas si importante et que la réactivité de l'application est critique, mettez à jour l'affichage de l'utilisateur, puis effectuez la suppression de manière asynchrone dans les coulisses.

+0

+1 - Je pense que votre réponse était plus pertinente à ce qu'Andrew demandait que la mienne ... Je maintiens quand même ce que j'ai dit, cependant :) – iandisme

0

Vous devez définitivement mettre à jour l'activité enfant dès que l'action est validée. De cette façon, vous n'aurez pas d'incohérences. La mise à jour de nombreuses modifications de l'activité enfant lors du retour au parent, alors que la sortie est risquée, car si le réseau perd la connexion, toutes les modifications peuvent ne pas être entièrement validées. Cela pourrait conduire à des incohérences de base de données.

+0

Mais les incohérences de base de données sont inévitables pour les applications qui synchronisent les données sur un serveur. À partir du moment où l'utilisateur effectue une action, les bases de données ne sont plus synchronisées. Si le téléphone de l'utilisateur est éteint et qu'il utilise le Web, les bases de données ne sont plus synchronisées. Ce qui est important est de fournir un mécanisme approprié pour une synchronisation correcte. Si un appel échoue, il devrait y avoir un mécanisme en place pour réessayer l'appel à un moment ultérieur. – Andrew

+0

Un horodatage simple aidera dans ce cas. Laissez tous les enregistrements ont leur propre horodatage. Le dernier doit remplacer l'ancienne version. De cette façon, je suppose que l'appareil se désynchronise pendant une période donnée en comparant simplement les horodatages des fichiers. – Shouvik

Questions connexes