Как я могу выразить Try / Catch в графе потока управления? - PullRequest
1 голос
/ 21 мая 2019

Я пытаюсь вычислить некоторую цикломатическую сложность , поэтому пытаюсь нарисовать график потока управления. Во-первых, я пытаюсь сделать это для довольно простого метода.

Во-первых, я попытался нарисовать его только для части, подобной этой: Flow Graph

Вот метод:

    [HttpPost]
    public ActionResult GraphMethod([FromForm]string str)
    {
        try
        {
            int affectedRows = this._copyManager.CreateCopy(str);
            if (affectedRows < 1) return BadRequest("Error!");

            return Ok();
        }
        catch (Exception ex)
        {
            return BadRequest(ex.Message);
        }
    }

Как бы я расширил его, включив в него весь метод и часть try?

Это мой первый в истории График потока управления , поэтому, если я все испортил, я бы тоже хотел узнать.

Ответы [ 2 ]

1 голос
/ 21 мая 2019

Я бы создал метод TryCreateCopy и сделал бы что-то очень похожее на ответ @saya imad
Примерно так:

[HttpPost]
public ActionResult GraphMethod([FromForm]string str)
{ 
    // These two if statements can be concatenated into one, 
    // but that would be a bit hard to read
    if (this._copyManager.TryCreateCopy(str, out var affectedRows))
        if (affectedRows > 1)
            return Ok();

    return BadRequest("Error!");
}

// _copyManager Method, there's probably a better way for you
public bool TryCreateCopy(string str, out int affectedRows)
{
    try
    {
        affectedRows = CreateCopy(str);
    }
    // Please also don't do `catch (Exception)`, 
    // if you know which exception gets thrown always catch that
    catch (Exception e)
    {
        affectedRows = -1;
        return false;
    }

    return true;
}

Где метод TryCreateCopy возвращает true, когда копия была создана безгенерируемое исключение, false, если оно было выброшено *, и переменная out с числом затронутых строк


* Возможно, есть лучший способ сделать это, чем тот, который я вам показал (например, метод validate?) как try / catch довольно ресурсоемкий

1 голос
/ 21 мая 2019

Со своей стороны я рекомендую вам использовать этот код, больше просто, больше эффективно

[HttpPost]
public ActionResult GraphMethod([FromForm]string str)
{       
        if (this._copyManager.CreateCopy(str) < 1) 
            return BadRequest("Error!");

        return Ok();      
}
...