Си диез / Говнокод #18806 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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
using DocsTaskInfo = System.Collections.Generic.KeyValuePair<int, bool>;
using DocAndContentType = System.Collections.Generic.KeyValuePair<int, string>;
using DocAndContentTypeToCount = System.Collections.Generic.Dictionary<System.Collections.Generic.KeyValuePair<int, string>, System.Collections.Generic.KeyValuePair<int, bool>>;
//...
private void DocsCountInternal(RefNetDbContainerDirect db, int docType, string contentType,  int status, int count, bool Checked = true){/*...*/}
//...
private DocAndContentTypeToCount[] _docCheckTasks;
private RefNetDbContainerDirect _dbForCheck;
private void ClearAllDocCounts(RefNetDbContainerDirect dbForCheck)
        {
            _dbForCheck = dbForCheck;
            _docCheckTasks = Enumerable.Repeat(new DocAndContentTypeToCount(), 2).ToArray();
                //new DocAndContentTypeToCount[2] { new DocAndContentTypeToCount(), new DocAndContentTypeToCount() };
        }
private void DocsCount(RefNetDbContainerDirect db, int docType, string contentType, int status, int count, bool Checked = true)
        {
            var taskHistory = _docCheckTasks[status];
            var taskKey = new DocAndContentType(docType, contentType);
            var taskInfo = new DocsTaskInfo(count, Checked);
            if(taskHistory.ContainsKey(taskKey))
                _exceptions.Add(new Exception(string.Format(
                                 "CheckDocsTask with (_.idDocType == {0}) && (_.contentType == \"{1}\") && (_.status == {2}) ) already contained",
                                 docType, contentType, status)));
            taskHistory.Add(taskKey, taskInfo);
        }
private void CheckAllDocCounts()
        {
            if (AllDocumentsMadeByServer)
            {
                //1
                var taskKeys = _docCheckTasks.SelectMany(_ => _.Keys)/*.Distinct()*/.ToArray();
                foreach (var taskKey in taskKeys)
                {
                    DocAndContentType key = taskKey;
                    foreach (var statusedTask in _docCheckTasks.Where(statusedTask => !statusedTask.ContainsKey(key)))
                        statusedTask.Add(taskKey, new DocsTaskInfo(0, true));
                }
                taskKeys.Select(_ => new
                {
                    docAndContentType = _,
                    count = _docCheckTasks[0][_].Key + _docCheckTasks[1][_].Key,
                    Checked = _docCheckTasks[0][_].Value && _docCheckTasks[1][_].Value
                }).ForEach(_ => DocsCountInternal(_dbForCheck, _.docAndContentType.Key, _.docAndContentType.Value, 1, _.count, _.Checked));
        }
            else
                //0 и 1
                foreach(var statusedTask in _docCheckTasks.Select((tasks, status) => new {tasks, status}))
                    foreach (var task in statusedTask.tasks)
                        DocsCountInternal(_dbForCheck, task.Key.Key, task.Key.Value, statusedTask.status, task.Value.Key, task.Value.Value);
            _docCheckTasks = null;
            _dbForCheck = null;
        }

Автору я бы посоветовал утопиться, но как посоветуете отрефакторить?
Планировалось, что чувак вызывает ClearAllDocCounts, затем много раз метод DocsCount, а потом CheckAllDocCounts.

Запостил: USB USB, (Updated )

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

    • сам код тяжёлый и читается тяжело.
      только за:
      using DocsTaskInfo = System.Collections.Generic.KeyValuePair< int, bool>;
      нужно по рукам бить
      Ответить
      • А что это значит? DocsTaskInfo теперь алиас System.Collections.Generic.KeyValuePair< int, bool>?
        Ответить

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

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8