Où stocker des informations de police d'étiquettes - dans le modèle ou la vue?
-
26-09-2019 - |
Question
Quelle est la meilleure pratique pour stocker des informations de police d'étiquettes à Cocoa-Touch suivant le paradigme MVC?
Dans mon modèle de données que je souhaite stocker des informations qui sont affichées par une vue personnalisée comme UILabel
s. Il est évident que le texte de l'étiquette appartient au modèle de données. Mais où dois-je stocker la police correspondante (et dans ma situation aussi la couleur) des informations? Ont-ils « appartiennent » au modèle de données ou plutôt à la vue?
La raison pour laquelle je demande est la suivante: Si j'ajoute simplement une propriété de classe UIFont
à mon modèle de données, je vais avoir des ennuis lors de la sérialisation et la copie de mes données (depuis UIFont
ne met pas en œuvre les protocoles de NSCoding
et NSCopying
), alors que les autres classes que j'utilise habituellement pour mes modèles de données font. (Le problème n'existe pas pour UIColor
puisque l'on a déjà NSCoding
et peut facilement ajouter NSCopying
, bien que l'on pourrait encore demander si la couleur devrait « appartiennent » au modèle de données.)
En général, je voudrais pouvoir sérialiser toutes les propriétés de mes modèles de données et cela semble être un modèle très commun et général dans MVC. Bien sûr, je pourrais aussi écrire une abstraction des informations sur la police plutôt que d'utiliser UIFont
directement comme propriété dans mon modèle de données. Mais je me demande quelle est la meilleure utilisation de la pratique de MVC sur iOS est dans ce cas.
Mise à jour: Merci pour les réponses. J'ai décidé d'aller avec la mise en œuvre du « modèle de style » dans les cas où je crois qu'il est logique de stocker des informations de police dans les modèles. Afin de surmonter la difficulté mentionnée ci-dessus j'ai simplement écrit catégories pour les deux classes, consultez ce lien .
La solution
Je préfère ne pas stocker des informations relatives vue comme la police, la couleur, etc. dans le modèle de données. Plutôt que je vais utiliser une classe séparée pour stocker toutes les informations de style (Cette classe peut lire un fichier plist). En général, la couleur et d'autres propriétés de style de toutes les étiquettes, boutons etc. dans l'application seront identiques. Donc, je veux changer cette information en place simple et que vous souhaitez propager sur chaque étiquette. Cette information styling n'a rien à voir avec les données les étiquettes montrent des signes.
Le résumé est je préfère la séparation des données et le style (vous pouvez l'appeler StyleModel, si vous voulez). Il est évident que d'autres personnes peuvent choisir autrement, et la décision peut également dépendre des modalités d'application. (Spectacles de réponse de Benoît un exemple où les informations de style pourrait être une partie du modèle de données.)
Autres conseils
Si l'utilisateur (ou entrée externe) peuvent sélectionner la police, il fait partie du modèle.
Vous pouvez enregistrer le nom de la police