- 01
 - 02
 - 03
 - 04
 - 05
 - 06
 - 07
 - 08
 - 09
 - 10
 - 11
 - 12
 - 13
 - 14
 - 15
 - 16
 - 17
 - 18
 - 19
 - 20
 - 21
 - 22
 - 23
 - 24
 - 25
 - 26
 - 27
 - 28
 - 29
 - 30
 - 31
 - 32
 - 33
 - 34
 - 35
 - 36
 - 37
 - 38
 - 39
 - 40
 - 41
 - 42
 - 43
 - 44
 - 45
 - 46
 - 47
 - 48
 - 49
 - 50
 - 51
 - 52
 - 53
 - 54
 - 55
 - 56
 - 57
 - 58
 - 59
 - 60
 - 61
 - 62
 - 63
 - 64
 - 65
 - 66
 - 67
 - 68
 - 69
 - 70
 - 71
 - 72
 - 73
 - 74
 - 75
 - 76
 - 77
 - 78
 - 79
 - 80
 - 81
 - 82
 - 83
 - 84
 - 85
 - 86
 - 87
 - 88
 - 89
 - 90
 
                        private void SetValue(UserStructure item, int id, int tabKey, int elementKey, string newValue)
        {
            if (!item.Chats.ContainsKey(id))
                throw new KeyNotFoundException(String.Format(
                    "Чат с id = '{0}' недоступен с этой учётной записи", id));
            if (item.UserName != item.Chats[id].Own)
            {
                switch (item.Chats[id].UserPremission)
                {
                    case UserPremission.AccountLocked:
                        throw new AccessViolationException(String.Format(
                            "Чат с id = '{0}' заблокирован", id));
                }
            }
            int assemblyNumber = item.Chats[id].AssemplyNumber;
            if (!_contentManager.AssembplyContent.ContainsKey(assemblyNumber))
                throw new NotImplementedException(String.Format(
                    "Для сборки = '{0}' контент не реализован", assemblyNumber));
            Dictionary<int, TabItem> tabs = _contentManager.AssembplyContent[assemblyNumber];
            if (!tabs.ContainsKey(tabKey))
                throw new NotImplementedException(String.Format(
                    "Вкладка с ключём = '{0}' в сборке = '{1}' не существует", tabKey, assemblyNumber));
            if (!tabs[tabKey].Elements.ContainsKey(elementKey))
                throw new NotImplementedException(String.Format(
                    "Элемент с ключём = '{0}' во вкладке = '{1}' и сборке = '{2}' не существует", 
                    elementKey, tabKey, assemblyNumber));
            ElementItem element = tabs[tabKey].Elements[elementKey];
            GetSetParametrs getSetParametrs = new GetSetParametrs(item.Chats[id]);
            switch (element.ContentType)
            { 
                case ContentType.text_box:
                    switch (element.Resource)
                    { 
                        case ResourceType.file:
                            getSetParametrs.SetValueToFile(element.Value, newValue);
                            break;
			...............................................
                        case ResourceType.change_login:
                            getSetParametrs.SetValueToChangeLogin(item.UserName, newValue);
                            break;
                        case ResourceType.change_password:
                            getSetParametrs.SetValueToChangePassword(newValue);
                            break;
                    }
                    break;
                case ContentType.payment_button:
                    switch (element.Resource)
                    {
                        case ResourceType.extend_chat:
                            getSetParametrs.PayForChat();
                            break;
                        case ResourceType.clear_credentials:
                            getSetParametrs.SetValueToClearCredentials(element.Price);
                            break;
                        case ResourceType.clear_users:
                            getSetParametrs.SetValueToClearUsers(element.Price);
                            break;
                    }
                    break;
                case ContentType.money_transfer:
                    switch (element.Resource)
                    {
                        case ResourceType.money_to_chat:
                            getSetParametrs.SetValueToMoneyTransfer(item.MainChat, newValue);
                            break;
                    }
                    break;
                default:
                    throw new FieldAccessException(String.Format(
                        "Ресурс '{0}' с ключём = '{1}' во вкладке = '{2}' и сборке = '{3}' недоступен для редакирования",
                        element.Resource, elementKey, tabKey, assemblyNumber));
            }
        }
                                 
        
а не
а?
и вообще, слишком много свитчей
getSetParametrs - просто замечательно :)
есть такой рефаторинг: "замена условной логики состоянием/стратегией"
Я каждое утро забываю, что было вчера.
Извините
int x;int y=x=0;for(int z=0,y=5;x<y;x++)x*=100500;
так и ось можно 2мя функциями написать))
Надо, кстати, спиздить как-нить у его кусок, выложить. Хотя банально, но плотностью говнокода на 10 символов должен доставить.
ЗЫ: тя кто-то минусит упорно день второй наверно.
Не знаю, слишком спорный вопрос, чтобы ставить рамки. Хотя для шарпа их ставить проще, чем для плюсов и тем более сей.
Да и все равно писать будет каждый подсознательно под свой экран. Если это вообще его колышит. Всё же это меньше всего влияет на читабельность.
Если не помещается -- с помощью рефаторинга "extract method" дробим его на более мплкие
А серьезно -- у меня экран 11", на работе 22", а у друга что-то за 30. Даже с 9 высотой шрифта я на 11" мало что-тто таких методов вижу, чтоб помещались.
и вообще -- метод можно разнести как минимум на 4 аккуратненьких метода.
"Любой кусок кода, которому ты можешь дать название -- выноси в метод" (с) Фаулер
Этот конкретный метод -- согласен, я бы разнес, но больше так -- в целях самоорганизации.
Смысл всего лишь в том, что лучше вынести кусочек кода и дать ему понятное название, чем городить к нему комментарии например.
Ну если конечно Вы пишете драйвер, и для Вас каждый вызов функции на счету -- то конечно не надо так делать
Думаю можно было сделать так:
Свитчи по контенту оставить а ресурс уже вынести в отдельный метод
Я бы сказал, как это лечится, но прийдет xXx_totalwar и скажет что я уже это говорил)))