2016-12-19 5 views
0

I ont un système de communication basé sur des événements , ce qui est la version simplifed de celui-ci:L'utilisation de cette "fonction de raccourci" est-elle une bonne pratique?

classe A: contient des éléments issus de la classe classe B

B: a un pointeur sur son propriétaire un

Alors, quand B veut communiquer avec d'autres hôtes, il appelle une émission () méthode de:

  • m_owner-> Broadcast();

Mais je me demandais: méthode B, qui est juste ce

  • Dois-je faire une protégée Broadcast():
    • m_owner-> Broadcast();

Plus:

  • Au lieu de m_owner-> Broadcast() Je peux écrire simplement de diffusion()

    • ce qui rend le code plus propre.

Moins:

  • Il y aura une fonction d'appel dans la procédure.

    • Mais cela peut être évité en faisant la méthode en ligne

Est-ce une bonne pratique? Pourquoi oui et pourquoi pas?

+2

Je pense que cela va se fermer comme "principalement basé sur l'opinion". Personnellement, j'ajouterais la méthode. C'est beaucoup moins d'encombrement en lisant. (Bien que je considérerais le faire protéger, pas privé.) –

+0

@MartinBonner oh oui, c'est une faute de frappe, merci. S'il est fermé, cela signifie que la réponse est purement basée sur l'opinion. Ce qui signifie que je peux utiliser celui que je veux, et il n'a pas d'effets secondaires. Mais peut-être que j'ai tort. – Tudvari

+1

@Tudvari Si l'appel de fonction supplémentaire vous inquiète, je vous suggère de compiler et de vérifier l'assemblage. Les optimiseurs de nos jours sont vraiment très bons et il pourrait juste optimiser l'appel supplémentaire. – NathanOliver

Répondre

2

Dans une situation que vous avez décrite, cela ne fait probablement pas beaucoup de différence. Mais à l'avenir, il se peut que vous deviez ajouter du code supplémentaire à chaque endroit où est appelé Broadcast, par exemple la journalisation ou le verrouillage de mutex. Dans ce cas, une fonction séparée sera vraiment utile.

De même, vous mentionnez que vous avez des classes dérivées de B. S'il s'agit d'une classe dérivée qui appelle m_owner->Broadcast() et m_owner est un champ de classe de base, ce n'est pas un bon exemple.Les classes dérivées devraient mieux accéder aux fonctions protégées du parent, pas directement aux membres de données.

+0

+1 pour "Les classes dérivées devraient mieux accéder aux fonctions protégées du parent, pas directement aux membres de données". Cependant, @Tudvari, vous devriez également vous demander s'il est logique de dire "une émission B". Si, par exemple, il est plus logique de dire "un B demande à son propriétaire de diffuser" alors la méthode de B devrait probablement s'appeler quelque chose comme "RequestBroadcast". Sans que vous nous disiez ce que sont réellement les classes A et B, nous ne pouvons pas beaucoup aider. –