Допустим, у меня есть 3 класса, один объект контроллера Controller
и два объекта модели Foo
и Bar
.
Предположим, что Foo
и Bar
имеют метод stop
, который предназначен только для вызова только методом Controller
и не вызывается напрямую другими классами.
Как я могу сделать так, чтобы, если любой другой класс вызывал stop
непосредственно на Foo
и Bar
, они получали (в идеале) предупреждение о времени компиляции или (следующий лучше) предупреждение о времени выполнения?
Обратите внимание, что это предотвращает случайный вызов неправильного метода, а не того, который должен быть безопасным. Методы stop
могут быть переписаны, если это необходимо, но было бы неплохо, если бы не было необходимости.
Мои нынешние идеи:
1) Определите категорию Controller
для Foo
и Bar
и переместите туда метод остановки. Поместите это в отдельный файл, так что вам придется изо всех сил импортировать его (однако это не приведет к предупреждению компиляции, если кто-то сделает это в любом случае - но, по крайней мере, должно прояснить, что это не ожидаемый способ использования класс)
2) Добавьте параметр sender
к методам и убедитесь, что он имеет тип [класс контроллера] во время выполнения.
Но ни один из них не кажется идеальным, поскольку они оба подвержены ошибкам. Есть ли лучший объективный шаблон для такого рода вещей?