Редактировать : Теперь я согласен, что это неправильный ответ для случая Эндрю. Я хочу оставить этот ответ здесь для ветки комментариев. Пожалуйста, не голосуйте больше:)
Перед редактированием:
Обычно фальшивые объектные инфраструктуры не предназначены для упрощения сценария с одним классом, они предназначены для изоляции вашего кода, чтобы вы могли тестировать один класс.
Если вы попытаетесь использовать фиктивную инфраструктуру объектов для решения этой проблемы, она просто создаст производный класс и перегрузит этот метод. Единственным отличием будет то, что вы можете сделать это примерно в 3 строки вместо 5, потому что вам не нужно будет создавать определение производного класса.
Если вы хотите использовать фиктивные объекты для изоляции этого поведения, вам следует немного разделить этот класс. Логика GetNextRenewalDate
может существовать вне объекта RenewalService
.
Тот факт, что вы сталкиваетесь с этой проблемой, может показать, что существует еще более простой или более мелкозернистый дизайн, который еще предстоит открыть. Поиск класса, который является немного менее конкретным, с именем типа «менеджер» или «служба», часто является подсказкой, что вы можете разбить свой дизайн на более мелкие классы и получить от него лучшее повторное использование и ремонтопригодность.