2015-04-18 4 views
0

Je suis en train de créer une application qui affiche des objets d'un certain type dans différents contrôleurs de vue (trois ou quatre UITableViewController dans ce cas). Dans un endroit, ils vont être quelque chose comme latest objects, dans un autre endroit search results et ainsi de suite ... Donc, à la fin de la journée, les contrôleurs sont presque entièrement similaires. Ils ont seulement quelques variations. Par exemple, le SearchTableViewController comporte une barre de recherche et implémente les méthodes nécessaires à la fonctionnalité. A part ça, les classes "partagent" la plus grande partie de leur code. Que puis-je faire pour que ce code soit vraiment partagé et non dupliqué tel qu'il est en ce moment?Dilemme de conception de classe - code dupliqué pour des fonctionnalités assez proches

+1

Une technique souvent utilisée pour nettoyer les vues de table qui partagent des sources de données similaires consiste à décomposer la source de données en un objet distinct. Il y a un [bon article à ce sujet sur objc.io] (http://www.objc.io/issue-1/lighter-view-controllers.html). Vous pouvez créer une source de données de base qui implémente la plupart des méthodes requises, puis la sous-classer pour des cas d'utilisation plus spécifiques, tels que 'SearchTableViewController'. –

+1

Quelque chose à quoi je pensais en effet. Merci pour cela et le lien. – sf89

Répondre

1

Si l'interface utilisateur est significativement différente entre les contrôleurs de vue, vous devez probablement sous-classer. Mais si les différences résident dans le modèle de données ou dans le traitement des données, vous pouvez utiliser un contrôleur de vue générique et concevoir votre modèle de données de manière plus générique, afin qu'il puisse être consulté, trié ou recherché de manière unifiée. Dans mon expérience, cependant, tous les développeurs ont un instinct naturel d'éviter la duplication à tout prix, et cela nuit souvent au travail. D'un point de vue pragmatique, je suggèrerais de le mettre en œuvre de la manière la plus "évidente", et de penser à l'optimiser plus tard. C'est seulement alors que vous saurez où il y a des duplications dont vous pouvez vous débarrasser.

+0

J'aime vraiment votre approche. J'ai déjà implémenté ces classes et ai la duplication en place. C'est le bon moment pour suivre vos suggestions. – sf89