Конфликт проектного решения для методов в классе - PullRequest
0 голосов
/ 08 июня 2011

Хорошо, я постараюсь объяснить это как можно больше. У меня есть класс, скажем, MyLib, методы которого будут использоваться другим классом, скажем, классом Consumer. В MyLib есть открытый метод Navigate (), который будет использоваться Consumer. Этот метод обеспечивает уровень абстракции для потребителя, так как он может обеспечить различные типы навигации, используя только этот метод. Следующий фрагмент кода предоставляет необходимую кодовую карту.

// this method will be exposed to the consumer class.
public bool Navigate (NavigationType type)
{ 
    // this method will decide which private _navigateToXyz() method will be called.
    switch (type)
    {
       case x: return _navigateToX();
       case y: return _navigateToY();
       case z: return _navigateToZ(arg1, arg2);
       case a: return _navigateToA(arg3);
    }
}

private bool _navigateToX() { }
private bool _navigateToY() { }
// two or three additional _navigateTo_() without any parameters
private bool _navigateToZ (arg1, arg2) { }
private bool _navigateToA (arg3) { }

Как показано выше, все частные методы, кроме двух, требуют передачи некоторых аргументов. Поэтому, если я придерживаюсь этого подхода, то я, по сути, должен также передать эти аргументы в Navigate () - те аргументы, с которыми ни один из других методов не должен иметь ничего общего.

Я сейчас так делаю. Но я хочу знать, есть ли лучший подход в этой ситуации?

ОБНОВЛЕНИЕ: После некоторого мозгового штурма, я думаю, что метод Navigate () не является обязательным, поскольку он просто вызывает соответствующий метод на основе переданного навигационного типа. Теперь, когда NavigationType известен вызывающему Navigate (), он сам может вызвать тот самый метод, который требуется, если эти методы представлены как общедоступные. Я надеюсь, что я ясно. Так имеют ли значение дополнительные параметры вообще сейчас? Перегрузка метода имеет больше смысла?

Ответы [ 3 ]

1 голос
/ 08 июня 2011

Наличие нескольких открытых версий метода. Это будет иметь больше смысла для потребителей, рассматривающих это через intellisense.

0 голосов
/ 08 июня 2011

Вы можете обеспечить перегрузку или большее количество перегрузок, но имейте в виду, что перегрузки уменьшают возможность обнаружения API.Каждый раз, когда потребителю API нужно «перемещаться», он сначала должен решить, какую перегрузку вызвать.Это может быть хорошо, если перегрузки имеют большой смысл и если потребитель уже знаком с API.

Другой способ - использовать класс для передачи параметра.В вашем случае NavigationType может быть классом, который инкапсулирует все возможные комбинации параметров.Этот класс также может иметь несколько констант, так что он может использоваться почти как перечисление.Также класс мог бы перегружать consutrctors или свободный интерфейс строителя, чтобы облегчить использование.Также класс может содержать некоторую логику навигации или логику выбора навигации, если это необходимо.

0 голосов
/ 08 июня 2011

Используйте дополнительные параметры, представленные в .NET 4.0

...