2015-11-19 6 views
0

Я пересматриваю часть своего кода, и я не могу не чувствовать, что он очень запутанный, сложный и запутанный. Изучив его все больше и больше, я начал замечать, что код не так сложный, как многословный.Как предотвратить регистрацию от загромождения кода?

Мы используем NLog и предоставляем очень подробный вывод в журнал отладки, поскольку приложение невероятно подвержено ошибкам, и мы стараемся быть очень тщательными.

Вот пример одного из наиболее простых методов

[HttpGet] 
    public ActionResult Zendesk(long? id) 
    { 
     if (!GlobalVariables.AllSyncSettings.SyncEnabled || !GlobalVariables.AllSyncSettings.ZdSyncEnabled) 
      return Json(new { Enabled = "False" }); 

     if (id == null || id == 0) 
      return Json(new { Error = "Missing or malformed ticket ID." }, AG); 

     if (CheckZdIdExists((long)id)) 
      return Json(new { status = "error, in queue." }, AG); 

     GlobalVariables.TicketsInQueue.Add((long)id); 

     Log("-------------- STARTING NEW CASE [ZENDESK]["+ id +"] --------------"); 

     var zdHelper = new ZendeskHelpers(); 
     var zdTicket = zdHelper.GetTicketById((long)id); 

     if (zdTicket == null) 
     { 
      Log("--------------- ENDING CASE [ZENDESK][" + id + "] ---------------"); 
      GlobalVariables.TicketsInQueue.Remove((long)id); 

      return Json(new { Error = "Error fetching ticket" }, AG); 
     } 

     var sfHelper = new SalesForceHelpers(); 
     if (!sfHelper.checkTicketOwner(zdTicket)) 
     { 
      Warn(id + " | Case generation not necessary. Ticket doesn't meet criteria."); 
      Log("--------------- ENDING CASE [ZENDESK][" + id + "] ---------------"); 
      GlobalVariables.TicketsInQueue.Remove((long)id); 
      return Json(new { success = "case was not generated" }, AG); 
     } 

     Log(id + " | Generating SalesForce case for Zendesk"); 

     var sfCase = sfHelper.GenerateCase(zdTicket); 
     if (sfCase == null) 
     { 
      Warn(id + " | Case was not generated successfully. Cannot continue."); 
      Log("--------------- ENDING CASE [ZENDESK][" + id + "] ---------------"); 
      GlobalVariables.TicketsInQueue.Remove((long)id); 
      return Json(new { Error = "Case was not generated successfully. Cannot continue." }, AG); 
     } 

     GetZDAttachments(zdHelper, sfHelper, (long)id, sfCase); 

     if (!zdTicket.Status.ToLower().Contains("closed") && ZendeskHelpers.GetCustomField(zdTicket, ZdCustomFields.SfCaseNo) == null) 
      zdHelper.SetSfId(zdTicket, sfCase.CaseNumber); 

     Log("--------------- ENDING CASE [ZENDESK][" + id + "] ---------------"); 
     GlobalVariables.TicketsInQueue.Remove((long)id); 

     return Json(new { SFCase = sfCase }, AG); 
    } 
+0

Возможно лучший вопрос для http://programmers.stackexchange.com/ –

+0

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

+2

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

ответ

-1

Ваш код полон условными (слишком много IFS) и что является причиной многословием. Вы должны заменить ваши условности на полиморфизм. Хорошая статья для этого приводится здесь

http://www.refactoring.com/catalog/replaceConditionalWithPolymorphism.html

+0

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

+0

Рефакторинг для шаблонов - это всегда хорошее предложение, но оно действительно не имеет никакого отношения к заданному вопросу. – David

Смежные вопросы