Ваш подход в конечном итоге приведет к очень связанному коду.
Подводя итог, можно сказать, что в идеале Эрик Липперт хотел бы, чтобы боксер мог ударить по многим вещам. Наличие боксерской груши в качестве подписи функции боксера подразумевает, что боксер создан с немедленным знанием всего (что можно пробить). Плюс удар и получение удара - это две ОЧЕНЬ разные вещи, поэтому они не должны иметь одно и то же имя.
Я предпочел бы смоделировать это как боксера, который создает удар (другой объект, который содержит силу удара удара, направление, направление и т. Д.).
Затем используйте боксерскую грушу с помощью метода, такого как onPunch, который получает этот объект перфорации, чтобы вычислить эффект перфорации на себе.
Помня об этом, имя вещей имеет большое значение. Это должно соответствовать вашей ментальной модели ситуации. Если вы обнаружите, что пытаетесь объяснить, как что-то может произойти, что на первый взгляд не имеет смысла, или если вам тяжело назвать что-либо, тогда, возможно, ваша модель неправильна и должна измениться.
Трудно изменить модель после того, как вы начали, люди обычно склоняются к реальности, чтобы соответствовать модели. Проблема заключается в том, что по мере того, как вы сгибаете вещи, чтобы соответствовать (например, боксерской груше, которая может пробивать вещи), мир, который вы создаете, становится все более и более сложным, а взаимодействие становится все более и более трудным для реализации. В конечном итоге вы достигнете точки, когда добавление даже самых тривиальных вещей станет кошмаром изменений и ошибок. Эта концептуальная техническая задолженность может иметь очень высокую цену, даже если первоначальная стоимость в то время воспринималась как самая дешевая вещь.