1. C# / Говнокод #12684

    +140

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    [WebMethod]
            public void runCompareService(string mAuthToken, int documentId, int origVerNum, int revisedVerNum)
            {
                //string result = null;
                DirectoryInfo tmpDirInfo = getTempDirectoryPath(documentId);
                try
                {
                    //authToken = authClient.AuthenticateUser(username, password);
                    authToken = mAuthToken;
                    otAuth.AuthenticationToken = authToken;
    
                    try
                    {
                        string origFilePath = String.Format(tmpFilePath, tmpDirInfo.ToString(), origVerNum);
                        string revisedFilePath = String.Format(tmpFilePath, tmpDirInfo.ToString(), revisedVerNum);
                        string resultFilePath = String.Format(tmpResFilePath, tmpDirInfo.ToString(), origVerNum, revisedVerNum);
    
                        string origContextId = getDocContextId(documentId, origVerNum);
                        string revisedContextId = getDocContextId(documentId, revisedVerNum);
    
                        try
                        {
                            downlodFileByContextId(origContextId, origFilePath);
                            downlodFileByContextId(revisedContextId, revisedFilePath);
                            try
                            {
                                doCompare(origFilePath, revisedFilePath, resultFilePath);
                                try
                                {
                                    DownloadToBrowser(resultFilePath);
                                    
                                    //uploadResultToCS(targetId, resultFilePath);
                                }
                                catch (Exception e)
                                {
                                    throw new Exception(String.Format("Failed to Download To Browser. Error: {0}", e.ToString()));
                                }
                            }
                            catch (Exception e)
                            {
                                throw new Exception(String.Format("Failed to do compare method . Error: {0}", e.ToString()));
                            }
                        }
                        catch (Exception e)
                        {
                            throw new Exception(String.Format("Failed to create and download file. Error: {0}", e.ToString()));
                        }
                    }
                    catch (Exception e)
                    {
                        throw new Exception("Failed to get Context ID for version Exeption details: " + e.ToString());
                    }
    
                }
                catch (Exception e)
                {
                    throw new Exception("Failed to auth user. Exeption details: " + e.ToString());
                }
                finally
                {
                    docManClient.Close();
                    contentServiceClient.Close();
                    if (Directory.Exists(tmpDirInfo.ToString()))
                    {
                        tmpDirInfo.Delete(true);
                    }
                }
                
            }

    Запостил: Landing, 04 Марта 2013

    Комментарии (23) RSS

    • Я совершенно согласен, что за throw new Exception нужно убивать.

      Наверное, даже, больнее, чем за catch(Exception). Хуже этого только пустой catch
      Ответить
    • На сколько нормальна такая вложенность траев? Чем заменить?
      Ответить
      • >На сколько нормальна такая вложенность траев?
        Исключения как бы создавались для того, чтобы не писать в таком стиле. Иначе тут нет особого отличия от:
        if( error ) ... else { if( error) ... else } ...
        Ответить
      • > На сколько нормальна такая вложенность траев? Чем заменить?

        Желательно не допускать более одного трая на функцию. В конце-концов, настолько ли серьезные ексептопроблемы решаются, чтобы тыкать траи во все поля и кричать 'throw!' по любому поводу? Это и затратнее при том.
        Ответить
        • Кстати, а там в конструкторе Exception нету как в жабе параметра cause, чтобы пристегнуть один экцепшн к другому более высокоуровневому, в качестве его причины? Или обязательно в таких случаях писать вот это "Немного текста о высоком уровне" + e.toString()?
          Ответить
          • есть конечно InnerException называется, емнип
            Ответить
      • >На сколько
        ...
        > нормальна такая вложенность траев
        Нет.
        >Чем заменить?
        Убрать всё кроме try-finally. Ловить исключения только в корневых методах. Документировать методы, на предмет исключений, писать что может оттуда вылезти. Попытка сана заставить принудительно, в виде checked исключений, обосралась. Это совсем не значит что документировать - плохо.

        >tmpDirInfo.Delete(true);
        Эксепшон отсюда в один прекрасный день заглушит другие.

        Жду разоблачений Тараса.
        Ответить
    • >downlod
      Втр, т прнс?
      Ответить
    • Зато пользователи будут благодарны, человек хоть написал, что случилось.
      Ответить
      • Если нет возможности выдать вменяемый текст, подсказывающий юзеру что он сделал не так и что можно исправить, то почти всегда лучше не пугать его бектрейсами, а показать что-нибудь в духе "Системная ошибка 100500. Обратитесь к одмину.", а текст исключения вывалить в лог, для людей более сведущих...

        P.S. Попробуйте на досуге выслушать бектрейс от человека, который учил в школе немецкий, и, при этом, не может скинуть вам его ни на почту ни куда либо еще... Это очень увлекательное занятие, поверьте...
        Ответить
    • кстати, вкладывать было совсем не обязательно. если описать цепочку последовательно, логика не изменится (все равно выполнение прерывается при выбрасывании исключения)
      Ответить
    • wvxvw "Зато пользователи будут благодарны, человек хоть написал, что случилось."

      Благодарны за "System.Exception: Failed to auth user. Exeption details: System.Exception: Failed to get Context ID for version Exeption details: System.Exception: Failed to create and download file. Error: System.Exception: Failed to do compare method . Error: System.Exception: Failed to Download To Browser. Error: System.Exception: Здесь могла быть ваша ошибка!
      в MainApp.Main() в c:\Users\Kegdan\Documents\Visual Studio 2012\Projects\ConsoleApplication12\Conso leApplication12\Program.cs:строка xx
      в MainApp.Main() в c:\Users\Kegdan\Documents\Visual Studio 2012\Projects\ConsoleApplication12\Conso leApplication12\Program.cs:строка xy
      в MainApp.Main() в c:\Users\Kegdan\Documents\Visual Studio 2012\Projects\ConsoleApplication12\Conso leApplication12\Program.cs:строка yx
      в MainApp.Main() в c:\Users\Kegdan\Documents\Visual Studio 2012\Projects\ConsoleApplication12\Conso leApplication12\Program.cs:строка yy
      в MainApp.Main() в c:\Users\Kegdan\Documents\Visual Studio 2012\Projects\ConsoleApplication12\Conso leApplication12\Program.cs:строка xz
      в MainApp.Main() в c:\Users\Kegdan\Documents\Visual Studio 2012\Projects\ConsoleApplication12\Conso leApplication12\Program.cs:строка zx"?
      Ответить
      • >leApplication12
        French?
        Ответить
      • И что? скопипастил разработчику и наслаждаешься. Не лезть же с отладчиком (он все равно ничего путнего не покажет).
        Ответить
        • >cкопипастил разработчику и наслаждаешься.
          Охуеть... Пользователь выполняет роль лога.
          > человек хоть написал, что случилось
          Ну да. Спасибо что показал мне эксепшен. Благодарность и премию заодно.
          О. Вижу там NPE в Govno.class:265:42- щас пойду сам пофиксю.
          Ответить
          • А вообще известно, что это исключение потом в лог не пишется? Откуда :/
            Пользователем может быть другой программист.
            И вообще, скучно с вами :/ прикапались к херне какой-то.
            Ответить
            • > другой программист
              Я вот читаю бектрейсы только в двух случаях - прога моя или у меня есть исходники этой проги (например опенсурс). В остальных случаях - пускай автор сам с ними разбирается.

              А в непонятных ситуациях гораздо интересней почитать понятные и подробные логи, и понять что именно привело к ошибке, чем таращиться на ее последствия в виде "System.Exception: Failed to auth user. Exeption details: System.Exception: Failed to get Context ID for version Exeption details: System.Exception: Failed to create and download file. Error: System.Exception: Failed to do compare method и 20 строк бесполезного без исходников бектрейса.
              Ответить
              • P.S. Что лучше:
                Can't open file c:\documents and settings\user\desktop\1.txt
                или
                System.IOException: Failed to open file
                at SomeClass.OpenFile() в c:\Users\Kegdan\Documents\Visual Studio 2012\Projects\ConsoleApplication12\Conso leApplication12\Program.cs:строка xx
                at SomeClass.LoadDocument() в c:\Users\Kegdan\Documents\Visual Studio 2012\Projects\ConsoleApplication12\Conso leApplication12\Program.cs:строка xx
                at MainApp.ClickHandler() в c:\Users\Kegdan\Documents\Visual Studio 2012\Projects\ConsoleApplication12\Conso leApplication12\Program.cs:строка xx
                at MainApp.Main() в c:\Users\Kegdan\Documents\Visual Studio 2012\Projects\ConsoleApplication12\Conso leApplication12\Program.cs:строка xx
                at MainApp.Main() в c:\Users\Kegdan\Documents\Visual Studio 2012\Projects\ConsoleApplication12\Conso leApplication12\Program.cs:строка xx
                в котором даже нет имен файлов.
                Ответить
        • А я отправляю сообщение с трассировкой на email, а пользователь показываю сообщение, что мол разработчик уже начал исправлять баг. Нельзя показывать пользователям технические подробности.
          Ответить
    • - А зачем? Там всё куплено. Вы думаете, я один такой лох? Да они пачками эти квартиры как бы покупали, а хозяева исчезали навсегда.
      Ответить

    Добавить комментарий