Suggestions requises pour architecturer mon code
-
18-09-2019 - |
Question
Historique
J'écris une partie de mon application qui n'a pas l'interface utilisateur. Il se trouve en arrière-plan regarder ce que vous faites et le calendrier de votre travail.
Il ne faut pas se chevauchent parfois, et il devrait y avoir aucune rupture dans les données de temps. S'il y a une ou l'autre de ces choses, l'application a un bug quelque part et je dois être informé.
Ce que je veux
Une classe appelée JGDataIntegrityController qui effectue les opérations suivantes:
-
Vérifiez la banque de données pour les temps en double. Numérisez depuis la dernière date du rapport en double stocké dans NSUserDefaults.
-
Si les temps en double sont trouvés, construire un rapport.
-
Envoyer le rapport.
Si l'envoi ne réussit pas, puis la sortie. Sinon continuer.
-
Supprimer les doublons
-
Mise à jour du dernier rapport en double date dans NSUserDefaults
-
Répéter l'opération pour les pauses de données.
ce que j'ai
Je l'ai fait une classe de base qui fait tout le travail acharné de l'envoi du rapport.
diagramme de classes http://synapticmishap.co.uk/ReportClasses.jpg
JGReportSender a le code suivant:
-(void)postReport:(NSString *)report {
NSMutableDictionary *form = // Dictionary Holding Report;
NSURLRequest *request = [NSURLRequest requestWithURL:@"http://postURL" postForm:form];
[NSURLConnection connectionWithRequest:request delegate:self];
}
Où je suis rester coincé
Que dois-je faire lorsque le rapport a été envoyé?
Les méthodes de délégué:
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError*)error
sont appelés lorsque le rapport a été envoyé. Mais comment dois-je communiquer avec JGDataIntegrityController?
Mon idée Crap
Mon idée est d'avoir une propriété reportStatus
NSNumber dans JGReportSender. Puis, quand les méthodes de délégués s'appellent, cela est mis à jour.
reportStatus = 1 signifie "rapport envoyé OK".
= 2 reportStatus signifie "envoi accusé de problème".
Je pourrais ajouter un observateur reportStatus pour JGDataDuplicateReportSender et JGDataBreakReportSender. Ce serait alors gérer le rapport envoi erreur ou continuer.
Toutes les bonnes idées?
Je reçois le sentiment que c'est une façon vraiment le désordre de le faire. Je pense aussi que je suis sur quelque chose vraiment évident.
Toutes les idées comment faire cela d'une manière propre?
Mise à jour
Je suis totalement oublié de mentionner - ce sera un opt 100% en fonction. Elle sera désactivée par défaut. Il faudra aussi 3 niveaux de la vie privée - de « une pause de données a eu lieu » à « une rupture de données produite après cette application a été actif avec ce chemin du document ». Et les rapports seront également anonymes.
Je suis conscient de tous les problèmes de confidentialité - est ce que je puisse rendre le logiciel plus, pas si je peux espionner les gens
La solution
Donner l'expéditeur du rapport une propriété delegate
et protocole, avec au moins deux méthodes: reportSenderDidSucceed:
et reportSender:failedWithError:
. L'expéditeur du rapport envoie ce dernier message de sa méthode connection:didFailWithError:
, en passant le long de l'objet d'erreur, il a.
J'espère que vous allez faire de cette option. Attendez-vous à beaucoup de messages en colère / curieux des utilisateurs (sans parler des avertissements publics de « ne pas utiliser cette application, car il téléphone à domicile » sur les pages Web) si vous ne le faites pas.
Autres conseils
Juste un mot pour dire si quelqu'un veut un bon tutoriel sur la mise en œuvre de vos propres délégués Peter suggère que je fais, je trouve celui-ci:
http://cocoadevcentral.com/articles/000075.php
Check it out. Il est excellent!