2009-07-24 7 views
3

J'ai un certain nombre de méthodes pratiques qui effectuent des extractions pour mes entités de données de base. Par exemple, une méthode qui renvoie des activités actuellement actives, ou un intervalle de temps entre deux activités terminées, ou un client par défaut s'il y en a un. J'ai aussi des méthodes pratiques pour initialiser et ajouter des entités avec différents attributs.Où dois-je conserver les données de base et les méthodes de commodité?

J'ai un modèle de données de données de classe singleton qui est le go-classe pour initialiser de base et d'obtenir le NSManagedObjectContext, etc.

Est-il préférable de mettre ces méthodes pratiques dans le modèle de données de classe singleton, ou chaque sous-classe d'entité pertinente en tant que méthodes de classe? Je ne pense pas qu'il y ait une Voie Vraie, mais j'aimerais avoir des opinions et des expériences. Merci!

Répondre

5

Je les associerais à la classe sur laquelle ils opèrent. Pour ce faire, je générerais d'abord des fichiers de classe pour vos entités (sélectionnez les entités dans l'éditeur, puis File> New File> NSManagedObject).

Ensuite, vient de mettre les méthodes dans les fichiers de classe, tels que:

+ [Activity activeActivities]; 
- [Activity intervalToActivity:(Activity *)other]; 
+ [Activity activityWithVariousAttributes]; // (plus maybe a corresponding initWithVariousAttributes)

La règle générale, je donnerais est que si la méthode fonctionne sur une classe spécifique, puis mettre la méthode dans cette classe . =)

1

Pour développer ce que Dave a dit, vous pouvez ajouter vos méthodes de proximité à une catégorie (par exemple FooManagedObject + Convenience.h/.m) de sorte que lorsque vous modifiez votre modèle de données et régénèrent vos sous-classes NSManagedObject (c.-à- FooManagedObject.h/.m), vous n'aboutissez pas à vos méthodes de commodité.

Une autre option utilise mogenerator qui, au lieu des catégories, gère une sous-classe NSManagedObject privée (générée automatiquement) et une sous-classe publique de la sous-classe générée automatiquement à laquelle vous pouvez ajouter vos propres méthodes. De cette façon, lorsque vous modifiez le modèle de données, seule la sous-classe privée est régénérée, mais la sous-classe dans laquelle résident vos méthodes de commodité reste intacte. C'est plus de travail à mettre en place que d'utiliser simplement des catégories, mais cela ajoute quelques méthodes de commodité supplémentaires et cela en vaut la peine.

Questions connexes