Lorsque vous souhaitez ajouter des informations supplémentaires dans une classe, quelle manière préférez-vous: étendriez-vous cette classe ou faire une enveloppe autour de celle-ci?
Dans mon scénario particulier, je veux ajouter des informations de pagination avec un et un couple de méthodes: p> Quelle est votre opinion, étendre ou envelopper? p> p> Liste code> que je reçois de la base de données. Cette information de pagination comprendra: p>
6 Réponses :
Trop étendre est diabolique et rendra votre code difficile à lire / à comprendre Go avec la composition, créez simplement une nouvelle classe qui possède une collection et vos membres supplémentaires nécessaires à la pagination. p>
Je préfère envelopper dans la mesure du possible. Surtout dans votre liste code> code> - La classe wrapper peut contenir n'importe quel type de liste, alors qu'une classe étendue est liée à une superclasse en béton spécifique. P>
On dirait que vous demandez si vous devriez privilégier l'héritage ou la composition dans votre situation. Je dirais que vous ne créez pas une nouvelle implémentation de la liste code> et que vous ne vous souciez pas vraiment de la mise en œuvre de la liste
code>, de sorte que l'héritage ne correspond pas à votre problème. Au lieu de cela, vous fournissez des fonctionnalités de pagination. Je créerais une classe qui enveloppe génériquement (encapsulate) la logique de pagination à l'aide de
list code> ou une autre collection générique. P>
Liste code> elle-même, déléguant toutes les méthodes La liste d'origine (qui est transmise dans le constructeur, par exemple) < / li>
- L'héritage n'est pas toujours tort, mais dans ce cas, vous ne saurez pas quelle classe à étendre - sera-t-il
ArrayList code> ou LinkedList CODE>? LI>
ul>
Même si vous étendez, vous ne pourrez pas appeler les nouvelles méthodes via la référence de super classe. Il est préférable de simplement l'envelopper. P>
Avoir une élégante pagichelist (liste d'extension) est une approche adéquate. P>
Pourquoi déléguer quand vous pouvez hériter des choses dont vous avez besoin? p> li>
C'est comme la relation entre la filereader et la bufferedfilerreader (et personne ne dirait que c'est une mauvaise pratique). P> Li> ul>