2009-01-17 12 views

Répondre

2

Cela dépend du degré de couplage de l'objet et des objets qu'il contient. Si vous avez une classe Personne et que cette personne a des numéros de téléphone allant de zéro à plusieurs, vous voudriez généralement que le numéro de téléphone soit une classe distincte, car plusieurs types d'objets différents pourraient avoir des numéros de téléphone (par exemple, commerces, écoles, etc.). Mais si l'objet est quelque chose qui est naturellement étroitement couplé, par exemple l'objet Personne pourrait avoir des orteils, alors une classe interne peut avoir un sens.

Certaines questions que vous pourriez vous poser sont: 1. L'objet agrégé nécessite-t-il un accès aux parties privées de la classe qui le contient? Si c'est le cas, une classe interne est un bon pari. 2. L'objet agrégé appartient-il toujours à exactement un objet, et l'objet auquel il appartient ne change jamais? Si non, alors vous ne voulez probablement pas de classe interne. 3. L'objet agrégé est-il significatif en dehors du contexte de l'objet d'agrégation? Si c'est le cas, cela ne devrait probablement pas être une classe interne. En cas de doute, il est généralement préférable d'utiliser une classe définie séparément, si ce n'est pour d'autres raisons que le couplage s'arrête et que les fichiers source sont plus petits.

Aussi pas que ce n'est pas nécessairement un ou l'autre. Vous pouvez toujours définir une classe ou une interface distincte, puis la sous-classe/l'implémenter dans la classe d'agrégation.

2

Si les objets agrégés sont séparables, c'est-à-dire qu'ils peuvent apparaître séparément et globalement, alors j'aurais une classe séparée par objet et j'utiliserais des collections typées pour représenter les agrégats.

1

Vous ne savez pas ce que MVC a à voir avec les agrégats de domaine car il est possible d'utiliser ce dernier sans interface utilisateur.

Je préfère généralement faire les parties d'un agrégat des classes distinctes parce que les parties peuvent avoir une signification commerciale de leur propre chef. Les classes imbriquées ont un sens lorsque la classe externe doit être chargée avant la classe interne ou lorsque vous ne pouvez pas rendre la classe interne publique (au moins, ces choses s'appliquent à Java).

Questions connexes