Как уменьшить связь, когда один класс вызывает только один метод другого класса, который имеет много методов? - PullRequest
6 голосов
/ 02 апреля 2011

У меня есть класс (назовем его MyService), который принимает две зависимости в своем конструкторе. Первый не все, что имеет отношение к вопросу. Второй - PaymentDetails. PaymentDetails живет дольше, чем MyService, который создается фабрикой для обработки этого конкретного запроса.

В MyService.process(), это:

  • делает что-то с первой зависимостью,
  • создает объект new TransactionDetails() и устанавливает для него различные вещи,
  • звонки myPaymentDetails.setTransactionDetails( td );
  • возвращает что-то, чтобы сказать, какая страница в мастере следует за следующей

PaymentDetails по необходимости имеет много методов. Это объект в стиле Entity, в который встраивается информация, когда пользователь проходит по 5 страниц.

Меня беспокоит то, что, как написано, мой класс обслуживания зависит от всего PaymentDetails, но вызывает только один единственный метод.

Это беспокоит меня, потому что:

  • ограничит возможность повторного использования класса обслуживания
  • Невозможно понять, каковы реальные зависимости, читая сигнатуры метода

Мой вопрос:

Как лучше всего это исправить, чтобы у моего класса обслуживания были минимальные зависимости?

Ответы [ 2 ]

13 голосов
/ 02 апреля 2011

Вы можете создать простой интерфейс:

public interface TransactionAcceptor {
    void setTransactionDetails(TransactionDetails td);
}

Имейте PaymentDetails, заявляют, что он реализует интерфейс:

public class PaymentDetails implements TransactionAcceptor {
    ...
}

И, конечно, он уже реализует требуемый метод. Тогда MyService должен иметь дело только с интерфейсом TransactionAcceptor и не быть связан с PaymentDetails.

4 голосов
/ 02 апреля 2011

Добавьте interface Transactionable или что-то еще и пусть PaymentDetails реализует это.В MyService работают только с «Транзакциями».

...