2016-12-19 1 views
0

У меня есть системасобытия на основе связи, и это упрощенный вариант этого:Является ли использование этой «функции сокращения» хорошей практикой?

класса А: содержит элементы, полученные из класса B

Класс B: имеет указатель на его собственник А

Так что, когда B хочет общаться с другими Bs, он называет в Broadcast() метод:

  • m_owner-> Broadcast();

Но мне было интересно:

  • Должен ли я сделать метод защищенной Broadcast() для B, который только это:
    • m_owner-> Broadcast();

Плюсы:

  • Вместо m_owner-> Broadcast() я могу написать только Broadcast()

    • это делает чистый код.

Минусы:

  • Там будет +1 функция вызова в процедуре.

    • Но этого можно избежать, сделав метод INLINE

Это хорошая практика? Почему да, а почему нет?

+2

Я думаю, что это будет закрыто, поскольку «в основном основанное мнение». Лично я бы добавил метод. Когда читаешь, это намного меньше. (Хотя я бы подумал сделать его защищенным, а не частным.) –

+0

@MartinBonner о да, это опечатка, спасибо. Если он будет закрыт, это означает, что ответ основан на чисто мнениях. Это означает, что я могу использовать то, что я хочу, и он не имеет побочных эффектов. Но, возможно, я ошибаюсь. – Tudvari

+1

@Tudvari Если вас беспокоит дополнительный вызов функции, я предлагаю вам скомпилировать и проверить сборку. Оптимизаторы в настоящее время действительно неплохие, и это может просто оптимизировать дополнительный звонок. – NathanOliver

ответ

2

В ситуации, о которой вы описали, это, вероятно, действительно не имеет большого значения.

Но в будущем вы можете обнаружить, что вам нужно будет добавить дополнительный код для каждого места, где вызывается Broadcast, например, регистрация или блокировка мьютекса. В этом случае отдельная функция будет действительно полезна.

Также вы упомянули, что у вас есть классы , полученные от B. Если это класс, который вызывает m_owner->Broadcast(), а m_owner - это поле базового класса, то это не очень хороший шаблон.Производные классы должны лучше обращаться к защищенным функциям родителя, а не непосредственно к элементам данных.

+0

+1 для «_Дервированные классы должны лучше обращаться к защищенным функциям родителя, а не непосредственно к элементам данных». Тем не менее, @Tudvari, вы также должны спросить себя, имеет ли смысл говорить «трансляции B». Если, например, имеет смысл сказать, что «B просит своего владельца транслировать», тогда метод B следует назвать чем-то вроде «RequestBroadcast». Если вы не сообщите нам, какие классы A и B на самом деле, мы не можем много помочь. –

Смежные вопросы