Удаление зависимости Convert.ToDecimal (внедрение зависимостей)

В настоящее время я изучаю внедрение зависимостей для создания более удобного кода с помощью MVC. Я уже внедряю модель и службу калькулятора в свой контроллер вместо новой зависимости.

У меня есть несколько вызовов Convert.ToDecimal в моем конструкторе, и я не знал, нужно ли мне беспокоиться об использовании внедрения зависимостей для удаления вызова статического метода, который является запахом дизайна DI. Удаление этого зашло слишком далеко?

private readonly ICalculationService _calculation;
private readonly ICalculatorModelService _calculatormodel;

public CalculatorController(ICalculationService calculation,
    ICalculatorModelService calculatormodel) {
    _calculation = calculation;
    _calculatormodel = calculatormodel;
}

public ActionResult Index() {
    var model = _calculatormodel;
    return View(model);
}

public PartialViewResult Calculate(string submit, string txtValue, 
    string value1) {
    var model = _calculatormodel;
    if (submit == "+")
    {
        if (Session["value1"] == null)
            Session.Add("value1",Convert.ToDecimal(txtValue));
        else
            Session["value1"] = value1;
    }
    else if (submit == "=")
    {
        if (Session["value1"] == null)
        Session.Add("value1", 0);

        model.Result = _calculation.Calculate(Convert
            .ToDecimal(Session["value1"]), Convert.ToDecimal(txtValue));
    }

    return PartialView("_Calculator", model);
}

person Brandon Tull    schedule 09.04.2014    source источник
comment
Что вы думаете о зависимостях от типов string, decimal?   -  person Hamlet Hakobyan    schedule 10.04.2014
comment
Я не совсем понимаю ваш вопрос. В настоящее время код зависит от класса Convert .Net.   -  person Brandon Tull    schedule 10.04.2014
comment
В основном это зависит от того, насколько легко будет код тестировать и поддерживать на основе зависимости. Если ее легко тестировать и поддерживать при вызове статической функции, ее внедрение не принесет большой выгоды. Но если сложно тестировать и поддерживать, вам следует внедрить зависимость, потому что тогда вы можете заглушить ее в тестах.   -  person Caleb    schedule 10.04.2014
comment
Спасибо за ответ Калеб. Это было полезно. Я счастлив, что учусь!   -  person Brandon Tull    schedule 10.04.2014
comment
Узнайте о разнице между стабильными и нестабильными зависимостями.   -  person Steven    schedule 10.04.2014


Ответы (1)


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

Если это так, у вас тоже нет. То же самое касается аналогичных статических вызовов, таких как методы Math. и т. д.

Правило, которому я следую для таких вспомогательных вызовов .NET, заключается в том, что если вызов является детерминированным, т.е. всегда возвращает один и тот же вывод для одного и того же ввода, тогда продолжайте вызывать его (в любом случае вы зависите от .NET framework, верно?). Но если вызов недетерминирован, например Datetime.Now или использование класса Random, тогда я ввожу эти зависимости (что, конечно, делает код более тестируемым)

person zafeiris.m    schedule 09.04.2014
comment
Это имеет для меня полный смысл. Спасибо, что разобрался. Мне нравится твой ответ! - person Brandon Tull; 10.04.2014