Как работать с идеей "много маленьких функций" для классов, не передавая много параметров?

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

Каждая дополнительная вспомогательная функция загромождает интерфейс, поскольку часто код специфичен для класса, и я не могу просто использовать какой-то общий кусок кода. (По крайней мере, по моим ограниченным знаниям, я все еще новичок, не знаю всех существующих библиотек и т.д.)

Поэтому в крайних случаях я обычно создаю класс-помощник, который становится другом класса, с которым нужно работать, так что у него есть доступ ко всем непубличным внутренностям.

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

Является ли все это вопросом предпочтений, или есть широко используемый способ работы с подобными вещами?

Я знаю, что попытка принудительно загнать вещи в шаблоны является своего рода антишаблоном, но меня волнует обмен кодом и стандарты, и я хочу получить материал, по крайней мере, довольно не болезненный для других людей для чтения.

Итак, как вы, ребята, справляетесь с этим?

Редактировать: Некоторые примеры, которые побудили меня задать этот вопрос:

О свободных функциях: DeadMG был озадачен тем, как заставить свободные функции работать... без аргументов.

Моя проблема с этими функциями в том, что в отличие от функций-членов, свободные функции знают о данных, только если вы им их передадите, если только не используются глобальные переменные и тому подобное.

Иногда, однако, у меня есть огромная, сложная процедура, которую я хочу разбить на части для удобства чтения и понимания, но в ней так много различных переменных, которые используются повсюду, что передача всех данных свободным функциям, которые не имеют отношения к каждой частице данных-членов, выглядит просто кошмарно. Нажмите для примера

Это фрагмент функции, преобразующей данные в формат, который принимает мой класс mesh. Потребовались бы все эти параметры, чтобы рефакторить это, например, в функцию "finalizeMesh". На данный момент это часть огромной компьютерной функции данных mesh, и биты информации об измерениях, размерах и масштабировании используются повсюду, переплетаясь.

Вот что я имею в виду, говоря "свободным функциям иногда нужно слишком много параметров".

Я думаю, это говорит о плохом стиле, и не обязательно является симптомом нерациональности как таковой, я надеюсь :P.

Я постараюсь прояснить ситуацию по ходу дела, если потребуется.

6
задан Erius 12 May 2011 в 11:36
поделиться