Я всегда путаюсь с тем, кто должен знать о другом.
например:
Circle.Draw (& canvas)
или Canvas.Draw (& circle)
или Draw (& canvas, & circle)
EmployeeVector.Save (& file)
или File.Save (& employee_vector)
или даже еще
void operator() (Employee e) { Save( e.Serialize();}
for_each(employees.begin(), employees.end(),File)
Я думаю, что в конечном итоге я слишком "абстрагируюсь", когда у меня есть всевозможные адаптеры, так что никто ни о ком не знает.