0

Je construis une application arithmétique & dans laquelle il y a des sous-classes de NSObject pour les nombres et les chiffres.Parmi ceux-ci ont des objets de vue correspondants qui prennent une source de données (un nombre ou un chiffre) et un délégué , le contrôleur de vue.voir comme propriété de l'objet modèle alternative

J'ai trouvé qu'il est utile d'obtenir les vues & le modèle à travailler ensemble pour définir les vues numériques comme une propriété de leurs chiffres correspondants.

Par exemple, la classe Number a une propriété NSMutableArray qui détient ses chiffres.

Si je veux trouver la taille pour la NumberView correspondante, je vous écris pouvez écrire du code comme celui-ci dans le contrôleur:

-(void) updateNumberViewFrameSize:(ACNumberView*) sender 
{ 
    NSUInteger i; 
    float width = 0, height = 0; 
    for (ACDigit* digit in [sender.dataSource returnNumberViewDataSource].digitArray) 
    { 
     width += digit.digitView.size.width; 
     height += digit.digitView.size.width; 
    } 
    sender.frame = CGRectMake(sender.frame.origin.x, sender.frame.origin.y, width, height); 
} 

Le code fonctionne très bien, mais je pense que ce n'est pas une bonne pratique de maintenez ce pointeur sur la vue du modèle, même si le modèle ne l'utilise pas lui-même.

Si elle est mauvaise pratique, quels sont les pièges potentiels, et est-il une meilleure façon d'atteindre cet objectif de type?

Répondre

1

Première: Vous avez raison. Ce n'est pas un bon design.

Deuxième: Vous calculer la taille d'une vue numérique à l'intérieur du modèle. Mais un point de vue devrait connaître sa taille elle-même. Il connaît le numéro à travers sa source de données et peut obtenir les chiffres. Il a donc toutes les informations pour calculer sa taille.

Pour afficher le problème, imaginez (même cette situation est sur iOS pas commun), que vous affichez le même nombre à deux endroits (= avec différentes vues numériques). Cela casserait votre modèle. Pourquoi?

Solution: Mettre tout le code lié à un état graphique (dessin, taille, ...) dans la vue du numéro et vue chiffres. Sur la moitié du chemin ce sera un travail supplémentaire. Mais à la fin, lorsque chaque code est migré vers la couche de vue, il est aussi simple que de le calculer dans le modèle.

+0

Un bon exemple de pourquoi c'est faux. Une vue peut-elle accéder à ses sous-vues? – chartman

+1

@chartman Oui, avec [afficher sous-vues]. –

+0

Vous avez raison, il est préférable de simplement calculer la taille de la vue pour le nombre en fonction de ce qu'elle doit conserver plutôt que d'obtenir les données des vues – chartman

Questions connexes