Фонд MVVM: зачем возвращать ICommand, если он определен как RelayCommand - PullRequest
2 голосов
/ 25 сентября 2010

Я использую проект SampleModel из MVVM Foundation . Почему ICommand возвращается, когда _decrementCommand объявлено как RelayCommand. Я знаю, RelayCommand наследует ICommand, но разве не будет понятнее просто вернуть RelayCommand?

public ICommand DecrementCommand {
    get { return _decrementCommand ?? (_decrementCommand = new RelayCommand(() => --this.Value)); }
}
RelayCommand _decrementCommand;

1 Ответ

5 голосов
/ 25 сентября 2010

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

В этом случае, если вы всегда возвращаете ICommand, вы можете изменить базовый тип команды, не прерывая вызовы. Вы также можете ожидать, что вызывающие абоненты не должны будут знать больше о том, что делает ваша функция, чем они на самом деле должны знать, что означает, что они с меньшей вероятностью нарушат принципы ОО.

...