Операторы Net Core Catch с другой бизнес-логикой в ​​файлах анализа - PullRequest
0 голосов
/ 23 сентября 2018

Я пишу простую программу для разбора текстового файла и помещения в Общий список.

Пример текста:

1,Joe,CA,58,2
2,Matt,TX,63,5

Иногда может быть ошибка с отсутствующими данными в файле

1,Joe,CA,58   // missing one number
2,Matt,TX,63,5

Я написал Catch Statement для обработки ошибки.В конце концов, Заказчику нужен файл, строки которого вызвали ошибку.

Мой принцип принципа программного обеспечения Вопрос в том, должны ли операторы catch использоваться для обработки другой бизнес-логики в случае ошибки или только для использования?для повышения исключений?В этом операторе catch я создаю папку с ошибкой и файл с данными, вызвавшими проблему.Это уместно?См. Заявление о вылове ниже.

-

public class CustomerData
{
    public int CustomerId { get; set; }
    public string CustomerName { get; set; }
    public string CustomerState { get; set; }
    public int ProductId { get; set; }
    public int QuantityBought { get; set; }
}

public List<CustomerData> GetCustomer(string filename)
{
    List<CustomerData> customerdata = new List<CustomerData>();
    string CustomerBase = filename;

    String fileToLoad = String.Format(CustomerBase);
    using (StreamReader r = new StreamReader(fileToLoad))
    {
        string line;
        while ((line = r.ReadLine()) != null)
        {
            string[] parts = line.Split(',');
            // Skip the column names row
            if (parts[0] == "id") continue;

            try
            {
                CustomerData dbp = new CustomerData
                { 
                    CustomerId = Convert.ToInt32(parts[0]),
                    CustomerName = parts[1],
                    CustomerState = parts[2],
                    ProductId = Convert.ToInt32(parts[3]),
                    QuantityBought = Convert.ToInt32(parts[4]),
                };
                customerdata.Add(dbp);
            }
            catch
            {
                Console.WriteLine("Parse Error!");

                string ErrorFolderPath = @"C:\Users\Desktop\Parsefile\ErrorFile";
                string ErrorFile = System.IO.Path.Combine(ErrorFolderPath, Path.GetFileName(filename));


                bool FolderExists = System.IO.Directory.Exists(ErrorFolderPath);
                if (!FolderExists)
                    System.IO.Directory.CreateDirectory(ErrorFolderPath);

                bool ErrorFileExists = System.IO.File.Exists(ErrorFile);
                if (!ErrorFileExists)
                    System.IO.File.Create(ErrorFile);

                using (TextWriter tw = new StreamWriter(ErrorFile))
                {
                    tw.WriteLine(line);
                }

            }
        }
    }
    return customerdata;
}

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

Спасибо за совет, я прекратил использовать любой Logger, Nlog - это особый случай.Дайте мне знать, если это правильные стандарты кодирования.Или не стесняйтесь комментировать.

            while ((line = r.ReadLine()) != null)
            {
                string[] parts = line.Split(',');
                // Skip the column names row
                if (parts[0] == "id") continue;

                try
                {
                    CustomerData dbp = new CustomerData
                    { 
                        CustomerId = Convert.ToInt32(parts[0]),
                        CustomerName = parts[1],
                        CustomerState = parts[2],
                        ProductId = Convert.ToInt32(parts[3]),
                        QuantityBought = Convert.ToInt32(parts[4]),
                    };
                    customerdata.Add(dbp);
                }
                catch (Exception ex)
                {
                    logger.Error(ex, "Got exception."); 
                    logger.Info(line);
                }
            }
0 голосов
/ 23 сентября 2018

НЕТ, это неправильно.В вашем блоке catch{} вы должны логически регистрировать и повторно выдавать исключение (ИЛИ), исходя из требований вашей системы, может повторить ту же операцию.Но не рекомендуется использовать такую ​​другую обработку, как создание папки или файлов, поскольку, если эти операции завершатся неудачей (по какой-то причине), они не будут перехвачены, и ваше приложение будет некорректно зависать.

...