Где выполнить проверку параметров в рамках вложенных методов - PullRequest
2 голосов
/ 20 января 2009

Где правильное место для выполнения проверки с учетом следующего сценария / кода ниже:

Только в MethodA: так как это публичный метод, который предназначен для использования внешними сборками? В MethodA и B, поскольку оба они могут быть доступны за пределами класса? Или Методы A, B и C, поскольку метод C может использоваться другим внутренним методом (но он может оказаться неэффективным, поскольку программист уже может видеть код для MethodC и, следовательно, должен знать, какие допустимые параметры следует передать)?

Спасибо за любой вклад.

public class A  
{     
    public void MethodA(param)  
    {  
         MethodB(param);  
    }  

    internal void MethodB(param)
    {
          MethodC(param);
    }

    private void MethodC(param)
    {
    }
}

Ответы [ 4 ]

2 голосов
/ 20 января 2009

Проверка параметров всегда должна выполняться независимо от местоположения вызывающего абонента (внутри или снаружи сборки). Оборонительное программирование, можно сказать.

1 голос
/ 20 января 2009

MethodC; таким образом параметр всегда проверяется, даже если кто-то приходит позже и добавляет вызов MethodC из класса A, или они делают MethodC общедоступной. Любое исключение следует указывать в том месте, где его лучше всего решить.

0 голосов
/ 20 января 2009

Учитывая, что более вероятный senario будет включать в себя каждый метод, имеющий разные параметры, а также, вероятно, некоторые

if (P1 == 1) { MethodA(P2) } else { MethodB(P2) }

Логика типа в долгосрочной перспективе имеет больше смысла проверять каждый параметр в точке входа, особенно если вам может потребоваться различная обработка ошибок в зависимости от того, где вызывался метод.

Если логика проверки для данного параметра начинает усложняться (т. Е. Более пяти строк кода), тогда рассмотрите закрытый метод для проверки этого параметра.

0 голосов
/ 20 января 2009

Нет «правильного» места, кроме как придерживаться принципов СУХОГО и не копировать код проверки в несколько мест. Обычно я рекомендую отложить проверку до самой последней возможной стадии, поскольку, если параметр никогда не используется, вам не нужно тратить время на его проверку. Это также дает валидации некоторую локальность к месту, где он используется, и вам никогда не нужно думать: «О, этот параметр уже валидирован?» как валидация прямо там.

...