Re[7]: Критика варианта Muxa
От: samius Япония http://sams-tricks.blogspot.com
Дата: 19.08.10 14:49
Оценка:
Здравствуйте, 0K, Вы писали:

0K>Здравствуйте, samius, Вы писали:


S>>Нет требований к видимости исключений. Это самодеятельность. Может "выйти" а может и не "выйти".


0K>Ошибаетесь. FxCop исправляет эту ошибку и дает ссылку на священное писание (MSDN).


И в отличие от "CA2229: Implement serialization constructors", которое ты назвал рекомендацией

Do not suppress a violation of the rule.


, по поводу "CA1064: Exceptions should be public" написано:

Suppress a message from this rule if you are sure in all cases that the private exception will be caught within its own internal scope

Re[22]: Для непонятливых, условия по пунктам
От: 0K Ниоткуда  
Дата: 19.08.10 14:49
Оценка: -1
Здравствуйте, gandjustas, Вы писали:

G>Во-первых ты снова описываешь что должна делать программа, а я спрашиваю зачем.


Когда вы в магазин приходите, продавец вас тоже спрашивает "зачем"? Какая исполнителю разница "зачем"? Ему сказали -- сделал. А зачем -- это уже заказчику нужно.

G>Ты думаешь в в риальном случае будет приходить заказчик и рассказывать о каких-то там файлах в папках?


Да, есть такие заказчики. Продвинутые. Причем спорить с ними бесполезно.

G>Опиши цели (для пользователя) и юзкейсы, тогда продолжим.


А цели я вам называл. Есть сторонняя программа, которая сканирует с определенным интервалом папку в поисках файлов счетчиков. Если файлы есть -- читает из них значение и исполняет. Если значение изменилось на 1 -- опять исполняет. И иногда может подпортить файл. Причем таких счетчиков нужно много -- вручную лучше не создавать.

А что это за вторая программа -- большая тайна.

Думаю достаточно информации, чтобы написать. Уже по пунктам расписал. Даже примеры есть 4 штуки и вы же сами на ошибки указывали. Так возьмите и напишите как правильно
=сначала спроси у GPT=
Re[23]: Для непонятливых, условия по пунктам
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.08.10 14:55
Оценка:
Здравствуйте, 0K, Вы писали:

0K>Здравствуйте, gandjustas, Вы писали:


G>>Во-первых ты снова описываешь что должна делать программа, а я спрашиваю зачем.


0K>Когда вы в магазин приходите, продавец вас тоже спрашивает "зачем"? Какая исполнителю разница "зачем"? Ему сказали -- сделал. А зачем -- это уже заказчику нужно.


Аналогии идут лесом.

G>>Ты думаешь в в риальном случае будет приходить заказчик и рассказывать о каких-то там файлах в папках?


0K>Да, есть такие заказчики. Продвинутые. Причем спорить с ними бесполезно.


G>>Опиши цели (для пользователя) и юзкейсы, тогда продолжим.


0K>А цели я вам называл. Есть сторонняя программа, которая сканирует с определенным интервалом папку в поисках файлов счетчиков. Если файлы есть -- читает из них значение и исполняет. Если значение изменилось на 1 -- опять исполняет. И иногда может подпортить файл.

И что потом делает с подпорченным файлом? Просто кладет йух? Как определяет что изменилось ровно на 1?
Это очень важные сведения, не отмахивайся от них.

0K>Причем таких счетчиков нужно много -- вручную лучше не создавать.

Все равно ограниченное количество и конкретные файлы, а не произвольные, вводимые пользователем.


0K>Думаю достаточно информации, чтобы написать. Уже по пунктам расписал. Даже примеры есть 4 штуки и вы же сами на ошибки указывали. Так возьмите и напишите как правильно

Нет, ты еще не описал юзкейсы для того что надо написать.

И снова пропустил главное, зачем оно нужно пользователю.
Re[24]: Для непонятливых, условия по пунктам
От: 0K Ниоткуда  
Дата: 19.08.10 15:38
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>И что потом делает с подпорченным файлом? Просто кладет йух? Как определяет что изменилось ровно на 1?

G>Это очень важные сведения, не отмахивайся от них.

Если он их портит -- то 99.999999% там записан набор байт, не являющийся текстовым представлением числа. Если файл испорчен оповестить пользователя и дать возможность ввести новое значение (для упрощения можно автоматически вписать нуль).

0K>>Причем таких счетчиков нужно много -- вручную лучше не создавать.

G>Все равно ограниченное количество и конкретные файлы, а не произвольные, вводимые пользователем.

Ну и что. Все равно их удобнее создавать через программу. И программа должна уметь это делать.

0K>>Думаю достаточно информации, чтобы написать. Уже по пунктам расписал. Даже примеры есть 4 штуки и вы же сами на ошибки указывали. Так возьмите и напишите как правильно

G>Нет, ты еще не описал юзкейсы для того что надо написать.



G>И снова пропустил главное, зачем оно нужно пользователю.


Для удобства управления той второй секретной программой.
=сначала спроси у GPT=
Re[25]: Для непонятливых, условия по пунктам
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.08.10 16:22
Оценка:
Здравствуйте, 0K, Вы писали:

0K>Здравствуйте, gandjustas, Вы писали:


G>>И что потом делает с подпорченным файлом? Просто кладет йух? Как определяет что изменилось ровно на 1?

G>>Это очень важные сведения, не отмахивайся от них.

0K>Если он их портит -- то 99.999999% там записан набор байт, не являющийся текстовым представлением числа. Если файл испорчен оповестить пользователя и дать возможность ввести новое значение (для упрощения можно автоматически вписать нуль).


)Ты сказал что программа отслеживает увеличение на 1, но при этом может испортить файл. Как это совмещается? Программа испортила, потом я туда записал 0, сработает?

Может эмулятор напишешь?

0K>>>Причем таких счетчиков нужно много -- вручную лучше не создавать.

G>>Все равно ограниченное количество и конкретные файлы, а не произвольные, вводимые пользователем.

0K>Ну и что. Все равно их удобнее создавать через программу. И программа должна уметь это делать.

Ну это уже я буду решать что она должна делать, твое дело предоставить полные и непротиворечивые юзкейсы.

G>>И снова пропустил главное, зачем оно нужно пользователю.

0K>Для удобства управления той второй секретной программой.
Что значит "удобство"?
Re[25]: Для непонятливых, условия по пунктам
От: akasoft Россия  
Дата: 19.08.10 17:58
Оценка: +1 :)))
Здравствуйте, 0K, Вы писали:

0K>Для удобства управления той второй секретной программой.


Слушай, и вот ради управления этой секретной программой ты уже который день паришь мозги в этом форуме, создал с десяток разных тем по исключениям?
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>> SQL Express 2008 R2
Re[26]: Для непонятливых, условия по пунктам
От: 0K Ниоткуда  
Дата: 19.08.10 18:08
Оценка:
Здравствуйте, gandjustas, Вы писали:

0K>>Ну и что. Все равно их удобнее создавать через программу. И программа должна уметь это делать.

G>Ну это уже я буду решать что она должна делать, твое дело предоставить полные и непротиворечивые юзкейсы.

Нет уж. Вам было сказано что нужно сделать -- это мне решать. Выполните требования в точности -- и получите награду. Если требования не полны -- это моя проблема.

Если есть вопросы по функционалу -- уточняйте.
=сначала спроси у GPT=
Re[27]: Для непонятливых, условия по пунктам
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.08.10 18:17
Оценка:
Здравствуйте, 0K, Вы писали:

0K>Здравствуйте, gandjustas, Вы писали:


0K>>>Ну и что. Все равно их удобнее создавать через программу. И программа должна уметь это делать.

G>>Ну это уже я буду решать что она должна делать, твое дело предоставить полные и непротиворечивые юзкейсы.

0K>Нет уж. Вам было сказано что нужно сделать -- это мне решать. Выполните требования в точности -- и получите награду. Если требования не полны -- это моя проблема.



Ты же сам хотел по-взрослому, а теперь въезжаешь. Видимо программа не нужна, раз ты не можешь SRS предоставить, даже с моей помощью. Значит код такой:

//пусто



Повторяй до просветления: Качество кода зависит от решаемых им задач. Не существует "правильной обработки исключений в вакууме", про которую ты тут всем пытаешься мозг сделать.
Re[28]: Для непонятливых, условия по пунктам
От: 0K Ниоткуда  
Дата: 19.08.10 18:32
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>

G>Ты же сам хотел по-взрослому, а теперь въезжаешь. Видимо программа не нужна, раз ты не можешь SRS предоставить, даже с моей помощью. Значит код такой:

Вы просто боитесь опозориться. Это стало понятно после нескольких постов. Если бы идея казалась вам глупой -- вы бы не критиковали тех, кто написал код. А раз указывали на их ошибки -- значит поняли что требуется.

G>Повторяй до просветления: Качество кода зависит от решаемых им задач. Не существует "правильной обработки исключений в вакууме", про которую ты тут всем пытаешься мозг сделать.


Задача расписана по пунктам, понятнее нельзя. Если есть конкретные вопросы -- задавайте, отвечу из принципа.

На врядли станете это делать, т.к. знаете что я опозорю ваш код. А то как обычно -- кто больше всех говорит -- хуже всех делает.
=сначала спроси у GPT=
Re[29]: Для непонятливых, условия по пунктам
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.08.10 18:51
Оценка:
Здравствуйте, 0K, Вы писали:

0K>Здравствуйте, gandjustas, Вы писали:


G>>

G>>Ты же сам хотел по-взрослому, а теперь въезжаешь. Видимо программа не нужна, раз ты не можешь SRS предоставить, даже с моей помощью. Значит код такой:

0K>Вы просто боитесь опозориться. Это стало понятно после нескольких постов.

Так ты еще и психолог?

0K>Если бы идея казалась вам глупой -- вы бы не критиковали тех, кто написал код. А раз указывали на их ошибки -- значит поняли что требуется.

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

G>>Повторяй до просветления: Качество кода зависит от решаемых им задач. Не существует "правильной обработки исключений в вакууме", про которую ты тут всем пытаешься мозг сделать.


0K>Задача расписана по пунктам, понятнее нельзя. Если есть конкретные вопросы -- задавайте, отвечу из принципа.

Ты расписал решение, а не задачу. Задачу ты так ни разу и не написал.

0K>На врядли станете это делать, т.к. знаете что я опозорю ваш код.

Я уже написал код. http://rsdn.ru/forum/dotnet/3923729.aspx
Автор: gandjustas
Дата: 18.08.10

Можешь прям щас начинать Я же специально написал все решения которые принял при разработке этого кода и юзкейсы.

Ты же начал выдумывать свою задачу, но почему-то не закончил... Выдумай свою задачу, тогда поговорим. Но надо чтобы она была риальной, как ты сам хочешь.
Re[29]: Для непонятливых, условия по пунктам
От: samius Япония http://sams-tricks.blogspot.com
Дата: 19.08.10 18:55
Оценка:
Здравствуйте, 0K, Вы писали:

0K>На врядли станете это делать, т.к. знаете что я опозорю ваш код. А то как обычно -- кто больше всех говорит -- хуже всех делает.

Самокритично
Re[30]: Для непонятливых, условия по пунктам
От: 0K Ниоткуда  
Дата: 20.08.10 04:37
Оценка: -2 :)))
Здравствуйте, gandjustas, Вы писали:

0K>>Задача расписана по пунктам, понятнее нельзя. Если есть конкретные вопросы -- задавайте, отвечу из принципа.

G>Ты расписал решение, а не задачу. Задачу ты так ни разу и не написал.

Вам как разработчику задачу знать не обязательно. Пишите код на основании тех требований, которые приведены.

А задача связана с работой второй программы. Но вам это не нужно.

0K>>На врядли станете это делать, т.к. знаете что я опозорю ваш код.

G>Я уже написал код. http://rsdn.ru/forum/dotnet/3923729.aspx
Автор: gandjustas
Дата: 18.08.10

G>Можешь прям щас начинать Я же специально написал все решения которые принял при разработке этого кода и юзкейсы.

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

Вам задача ясна, что было видно из вашей критики других участников. А придираться и требовать схем, более четких и непротиворечивых объяснений -- это участь леньтяев и неудачников, которые реально ничего делать не умеют.
=сначала спроси у GPT=
Re[31]: Для непонятливых, условия по пунктам
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.08.10 05:20
Оценка:
Здравствуйте, 0K, Вы писали:

0K>Здравствуйте, gandjustas, Вы писали:


0K>>>Задача расписана по пунктам, понятнее нельзя. Если есть конкретные вопросы -- задавайте, отвечу из принципа.

G>>Ты расписал решение, а не задачу. Задачу ты так ни разу и не написал.

0K>Вам как разработчику задачу знать не обязательно. Пишите код на основании тех требований, которые приведены.

0K>А задача связана с работой второй программы. Но вам это не нужно.

Ты окончательно слился.
Re[4]: Давайте писать ТЗ :)
От: mrjeka Россия  
Дата: 20.08.10 13:55
Оценка:
Здравствуйте, 0K, Вы писали:

Прочитал все ветки полностью. Возможно ошибаюсь, но мне кажется автор просто хочет решить поставленную перед ним задачу с помощью участников форума. (ИМХО)

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

Пока обойдемся без пользовательского интерфейса. Какой он будет ведь разницы нет.

Описание задачи:
Библиотека получает на вход название счетчика. Ищет/создает нужный счетчик, инкрементирует счетчик на 1. В случае, если данные счетчика не корректны, то сбросить инкремент в 0.
Тип счетчика — Int32. При переполнении числа сбросить на 0.
На момент изменения записи данные должны блокироваться для других клиентов

Т.к. источник данных может быть разный (файловое хранилище, БД и т.д.), то для ошибочных ситуаций создать типы возможных исключений, которые будут подниматься на верхний уровень.
Поле Message исключения должно нести достаточную информацию для программистов, но не пугающую конечного пользователя (Если исключение не перехватят на верхнем уровне, то его возможно увидит пользователь). Вся дополнительная информация должна передаваться в InnerException.

Персонально для ОК: Типов возможных исключений бояться не надо. Их не будет сотни-мульён, как вы это представляете. К примеру, для работы с файлами их порядка 10. (MS описала 10 ситуаций — не развалилось. Ну значит и вы сможете)

Клиент консольное приложение — забить
Клиент win-приложение — забить
Клиент web-приложение — забить
Клиент другая библиотека — забить

Другими словами, нам похер, кто использует данную библиотеку.

Если требований не достаточно, то дописать/изменить.

Для OK: Предлагаю написать для общества ТЗ на основании ТТ.

Когда напишете ТЗ, тогда вам накатают код не задавая дополнительных вопросов.
Re[5]: Давайте писать ТЗ :)
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.08.10 14:28
Оценка:
Здравствуйте, mrjeka, Вы писали:

M>Т.к. источник данных может быть разный (файловое хранилище, БД и т.д.), то для ошибочных ситуаций создать типы возможных исключений, которые будут подниматься на верхний уровень.


При таких условиях написать единую библиотеку не выйдет никак, потому что для файлов это будет код, а для БД просто запрос.
Поэтому предлагаю таки ограничиться файлами.

Если писать библиотеку для повторного использования, то стоит написать так:

void Increment(string fileName)
{
    using(var f = File.Open(fileName, FileMode.OpenOrCreate))
    {
        var reader = new StreamReader(f);
        var content = reader.ReadToEnd();
        
        var counter = 0;
        if(int.TryParse(content, out counter))
        {
            counter = (counter == int.MaxValue) ? 0 : (counter+1)
        }

        f.Seek(0, SeekOrigin.Begin);
        f.SetLength(0);

        var writer = new StreamWriter(f);
        writer.Write(counter);
    }
}


Заботу об исключениях отдать вызывающему коду.
Re[6]: Давайте писать ТЗ :)
От: mrjeka Россия  
Дата: 20.08.10 14:51
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, mrjeka, Вы писали:


M>>Т.к. источник данных может быть разный (файловое хранилище, БД и т.д.), то для ошибочных ситуаций создать типы возможных исключений, которые будут подниматься на верхний уровень.


G>При таких условиях написать единую библиотеку не выйдет никак, потому что для файлов это будет код, а для БД просто запрос.

G>Поэтому предлагаю таки ограничиться файлами.

Позволю себе не согласиться. Например в asp.net введена модель провайдеров. Пашет замечательно. Данные хранятся в БД(MS SQL, Oracle), ActiveDirectory, да в прочем где угодно.

Вся работа ведется через базовый провайдер.

Может я чего не понимаю, попытайтесь объяснить.


IManager
{
   void Increment();
}

DBManager:IManager
{
   void Increment()
   {
      ...
      catch(SqlException se)
     {
        //анализируем ситуацию
        throw new CustomFormatException("<мессага>",se);
     }
   }
}
FileManager:IManager
{
   void Increment()
   {
      ...
      if(!Какая либо проверка))
        {
             throw new CustomFormatException("<мессага>",se);
        }
   }
}
Re[7]: Давайте писать ТЗ :)
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.08.10 14:55
Оценка:
Здравствуйте, mrjeka, Вы писали:

M>Здравствуйте, gandjustas, Вы писали:


G>>Здравствуйте, mrjeka, Вы писали:


M>>>Т.к. источник данных может быть разный (файловое хранилище, БД и т.д.), то для ошибочных ситуаций создать типы возможных исключений, которые будут подниматься на верхний уровень.


G>>При таких условиях написать единую библиотеку не выйдет никак, потому что для файлов это будет код, а для БД просто запрос.

G>>Поэтому предлагаю таки ограничиться файлами.

M>Позволю себе не согласиться. Например в asp.net введена модель провайдеров. Пашет замечательно. Данные хранятся в БД(MS SQL, Oracle), ActiveDirectory, да в прочем где угодно.


M>Вся работа ведется через базовый провайдер.


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

А сделать IЧтоТоТам и реализовать методы несложно.
Re[8]: Давайте писать ТЗ :)
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.08.10 14:58
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, mrjeka, Вы писали:


M>>Здравствуйте, gandjustas, Вы писали:


G>>>Здравствуйте, mrjeka, Вы писали:


M>>>>Т.к. источник данных может быть разный (файловое хранилище, БД и т.д.), то для ошибочных ситуаций создать типы возможных исключений, которые будут подниматься на верхний уровень.


G>>>При таких условиях написать единую библиотеку не выйдет никак, потому что для файлов это будет код, а для БД просто запрос.

G>>>Поэтому предлагаю таки ограничиться файлами.

M>>Позволю себе не согласиться. Например в asp.net введена модель провайдеров. Пашет замечательно. Данные хранятся в БД(MS SQL, Oracle), ActiveDirectory, да в прочем где угодно.


M>>Вся работа ведется через базовый провайдер.


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


Ну и самое главное забыл. Если интересует именно обработка исключительных ситуаций, то лучше не пытаться причесать все к одному виду, для БД и файлов они будут капитально разные, вплоть до разных UI.
Re[9]: Давайте писать ТЗ :)
От: mrjeka Россия  
Дата: 20.08.10 16:06
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Ну и самое главное забыл. Если интересует именно обработка исключительных ситуаций, то лучше не пытаться причесать все к одному виду, для БД и файлов они будут капитально разные, вплоть до разных UI.


Я предлагаю сделать следующее по таким соображениям: В предложенном примере пользователя библиотеки я бы хотел ограничить умеренным числом возможных исключений (если библиотека может работать с разными источниками данных). Т.е. исключение несет в себе сообщение, в innerException подробности (фактически причина возникновения исключения). Надеюсь понятно объяснил.


Что до реализации, то если опереться на пример кода, приведенный автором, то обернуть всё тело метода майн в try/(и все возможные catch и делов).

Как говорится какой привет, такой ответ.

Поэтому я автору предлагаю написать нормальную формулировку задачи, т.к. у многих тут куча вопросов вроде как где и почему.

детализировать задачи.

Работа с исключениями в UI
Работа с исключениями в DLL
ну подумать, может еще какие либо ситуации придумает.

Вот например в вашем ответе есть недочет. Я согласен с тем, что надо поднимать исключения наверх. Но в методе существуют еще и свои условия, по которым выполнение операции невозможно. Если это метод библиотеки, то в этой ситуации надо поднимать (кастомное) исключение, которого нет в вашем примере. Если это метод UI, то исключения поднимать нет смысла, достаточно сформировать сообщение пользователю и показать его.
Re[10]: Давайте писать ТЗ :)
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 21.08.10 00:07
Оценка:
Здравствуйте, mrjeka, Вы писали:

M>Вот например в вашем ответе есть недочет. Я согласен с тем, что надо поднимать исключения наверх. Но в методе существуют еще и свои условия, по которым выполнение операции невозможно. Если это метод библиотеки, то в этой ситуации надо поднимать (кастомное) исключение, которого нет в вашем примере. Если это метод UI, то исключения поднимать нет смысла, достаточно сформировать сообщение пользователю и показать его.


Ну опять таки это имеет смысл если унифицировать интерфейс, а пока такого нет лучше кидать исключения как есть.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.