powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Исключения vs коды возвратов
406 сообщений из 406, показаны все 17 страниц
Исключения vs коды возвратов
    #39670257
Дядя Коля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кто хорошо в теме разбирается - есть какие-то мировые лидеры мнений которые топят за исключения? один програмист мне доказывает что коды лучше потому что так Джоэл сказал, очевидно надо найти не менее или примерно такого же по авторитету человека который топит за исключения.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670267
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дядя Коля,

обе фигня - код должен работать безошибочно (никаких исключений) и не должен возвращать ничего, кроме того, за чем его вызвали.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670268
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дядя Коля,
Какая смешная просьба).
У молодежи же нет авторитетов).
Это в раздел ПТ надо).
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670270
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosи не должен возвращать ничего, кроме того, за чем его вызвали.
Прямо дедовщина какая то)).
А если не смогла?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670273
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

на выход без пособия
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670302
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дядя Коля,

При чём тут мнение? Не надо топить или не топить за исключения. Если в языке есть исключения, надо их использовать. Если нет, то коды. Это не вопрос религии или мнения.

Если в компанию в разработку на C# придёт хоть трижды авторитетный человек со своими кодами вместо исключений, то пойдёт сразу на рынок труда со всеми своими монатками и дебильным мнением.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670306
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosДядя Коля,

обе фигня - код должен работать безошибочно (никаких исключений) и не должен возвращать ничего, кроме того, за чем его вызвали.когда пользователь откроет несуществующий файл или с несуществующего диска, программа вернет то что должна?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670313
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesViPRosДядя Коля,

обе фигня - код должен работать безошибочно (никаких исключений) и не должен возвращать ничего, кроме того, за чем его вызвали.когда пользователь откроет несуществующий файл или с несуществующего диска, программа вернет то что должна?
нех показывать пользователю несуществующий файл с несуществующего диска
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670331
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesкогда пользователь откроет несуществующий файл или с несуществующего диска, программа вернет то что должна?

По-моему очевидно, код 666.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670332
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosнех показывать пользователю несуществующий файл с несуществующего диска

А чё его скрывать? Может показывать только с правами админа?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670342
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

а если это программа для пользователя, которому ничего указывать не надо, он сам всё указывает, например из командной строки?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670344
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesViPRos,

а если это программа для пользователя, которому ничего указывать не надо, он сам всё указывает, например из командной строки?

ну, значит надо как то сделать так что бы твой интерпретатор команд не допускал ввода неверных команд
че ты так взъелся? ты ж не джойл тот?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670393
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosобе фигня - код должен работать безошибочно (никаких исключений) и не должен возвращать ничего, кроме того, за чем его вызвали.
Приложение работает с БД. Во время выполнения запроса сервер внезапно падает. Есть предложения, как реализовать работу кода в данном случае безошибочно, и без исключений? try/catch не предлагать, т.к. их использование уже подразумевает работу с исключениями.
Таких ситуаций можно привести еще вагон.

А коды возврата очень любят люди с травмой головы от винапи.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670403
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныА коды возврата очень любят люди с травмой головы от винапи)))) +1
GetLastError )))
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670414
казинак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если исключение не проглатывать, то оно само рэйзится в вызывающую процедуру.
А код возврата надо специально возвращать в вызывающую процедуру.
Для многочисленных вложенных вызовов в этом и смысл: "даже если прогер упустил что-то, то исключение вылетит и проинформирует"

Но,
если работаешь с фреймворком, то про эти try/catch надо забыть,
в случае возникновения ошипки фреймворк сам в лог запишет.
Главное правило - не писать свои коды ошибок и обработчики, просто залогировать эксепшн или выкинуть юзеру, чтоб разраб видел код ошипки системы, а не хрень на русском, типа "данный контрагент не может делать эту операцию"


Ну если у вас своя самописка, то там канеш навалом try/catch придется налепить.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670416
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
 File f = new File(path);
 if (!f.exists()) {
     if (f.mkdir()) {
      log.info("Удачненько");
     } else {
         log.error("ибитесь как хотите");
    }
   }
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670419
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
казинакА код возврата надо специально возвращать в вызывающую процедуру.был один старый проект из 300 методов работы с базой
Код: c#
1.
myDBUpdate(......, out stringError);
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670422
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
 File f = new File(path);
 if (!f.exists()) {
     if (f.mkdir()) {
      log.info("Удачненько");
     } else {
         log.error("ибитесь как хотите");
    }
   }


В веб проект на сервере в Африке.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670432
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
любителям джавы расажите
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670433
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
 File f = new File(path);
 if (!f.exists()) {
     if (f.mkdir()) {
      log.info("Удачненько");
     } else {
         log.error("ибитесь как хотите");
    }
   }


Файл экзист, но аксесс денайд - что тогда?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670438
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиPetro123,
любителям джавы расажитеда. Там не забалуешь. Там out, ref, var параметров нету.)
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670441
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670443
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
казинакГлавное правило - не писать свои коды ошибок и обработчики, просто залогировать эксепшн или выкинуть юзеру, чтоб разраб видел код ошипки системы, а не хрень на русском, типа "данный контрагент не может делать эту операцию"


Ну если у вас своя самописка, то там канеш навалом try/catch придется налепить.

Сколько пафоса!
Нужно и юзеру показать, что "в данный момент операция невозможно", и разработчику, что "в процедуре YYY возникло исключение XXX".

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

==============
Любая программа для кого-то является самопиской. Мы тут, все, собственно говоря, сами пишем
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670454
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вчера ругался с бекендом, "error -206 Ошибка формата данных"
час он разбирался в своем говнокоде, где ексепшен, и что там с данными ( их там х.. гора)
а если бы локализовал в каком участке джйсана - 5 -8 минут исправить.
Ну это имхо росийская болезнь рос криворуких ебланов
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670455
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дядя Коляодин програмист мне доказывает что коды лучше потому что так Джоэл сказал
что-то не смог нагуглить, кто это такой?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670470
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRДядя Коляодин програмист мне доказывает что коды лучше потому что так Джоэл сказал
что-то не смог нагуглить, кто это такой?
тынц
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670511
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны тынц
Спасибо! Т.е., он (небезосновательно) приравнивает исключения к goto’s и предлагает "нудный" но надежный способ избавится от них.
Joel SpolskyIn C/C++/Java style languages one way you can handle errors is to use the real return value for a result status, and if you have anything you want to return, use an OUT parameter to do that. This has the unforunate side effect of making it impossible to nest function calls, so result = f(g(x)) must become:
Код: plaintext
1.
2.
3.
4.
5.
T tmp;
if (ERROR == g(x, tmp))
     errorhandling;
if (ERROR == f(tmp, result))
     errorhandling;


This is ugly and annoying but it’s better than getting magic unexpected gotos sprinkled throughout your code at unpredictable places.
Кстати, оказывается, он еще и сооснователь Stack Overflow, пожалуй, самого эффективного ресурса (типа "вопрос-ответ") для разработчиков.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670530
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LR,

Со времен той статьи добавили спецификации исключений в деклараторы функций. Часть возражений Джоеля это снимает.

Где то были еще мнения других важных людей.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670540
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRнебезосновательно) приравнивает исключения к goto’sда бросьте вы.
Ерунда.
Тут и обсуждать нечего.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670546
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по мимо немедленного возврата в точку обработки исключения. Само исключение сообщает нам о том, где это исключение было вызвано, возвращает стек и прочую вспомогательную информацию и может вернуть в общем то любые данные, если тип исключения пользовательский. А возврат -1 мне не говорит ровным счетом не о чем. Так как цепочка вызова могла быть огромной, да и в самом методе, не понятно, где собака зарыта.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670557
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRСпасибо! Т.е., он (небезосновательно) приравнивает исключения к goto’s и предлагает "нудный" но надежный способ избавится от них.
У него еще и вот это:
They create too many possible exit points for a function . To write correct code, you really have to think about every possible code path through your function. Every time you call a function that can raise an exception and don’t catch it on the spot, you create opportunities for surprise bugs caused by functions that terminated abruptly, leaving data in an inconsistent state, or other code paths that you didn’t think about.
- я боязнь выделенного жирным встречал только у дельфистов, у которых до 2010-й версии RAD Studio не было оператора возврата из метода, и вследствие этого для них одна точка возврата - аксиома. А всё остальное даже не знаю, как комментировать. Программирование - это, в общем-то, такая штука, где всегда приходится really have to think about, и неважно, о чем - о возрате из функции, возможных исключениях, или еще о чем-то.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670569
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Ерунда.
Тут и обсуждать нечего.
Говорят, гризли - самый опасный зверь в Америке.
Ерунда. Тут и обсуждать нечего.
Я бросил в него восемь камней, а он мне даже ничего не сделал (в отличие от смотрителя зоопарка).
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670578
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LR,
))))
Ну дак тебе 6 мемберов сказали что он не опасен)
Тогда ты белая ворона).
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670612
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,

раньше считалось, что те, кто используют GoTo деформируется профессионально. А сейчас идет обратная тенденция. =)
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670627
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Исключения в C# реализованы через SEH. Сильные и слабые стороны этого механизма известны:
достоинства:
* позволяет писать удобный код, без бесконечных проверок if (f(x) == ERROR)...
* позволяет ловить нештатные ошибки
* позволяет финализировать блок кода
* позволяет корректировать ошибки*
недостатки
* нагрузка на компилятор при создании try блока
* тяжёлый нештатный выход из try блока - исключение или goto без leave

Соответственно и область применения должны быть с учётом достоинств и недостатков. Обычный код с обычными действиями пользователей должен проверяться на ошибки. Нештатные вещи (допустим - открыли существующий файл, но пока диалог закрывался, файл удалён или заблокирован другим процессом) обрабатываются через исключения.

Что касается того, что выбрать самому, то кроме выбора "исключение или код ошибки" есть и другие варианты. Например, тип Nullable - приятная фишка, что бы можно было возвращать значения через Return, но иметь возможность показать, что что-то пошло не так и избежать как громоздкого кода, так и исключения.

---------------------
* - а кстати, много народу знает об этом? Если, к примеру, было деление на 0, можно в обработчике скорректировать ошибку, вернуться в точку выполнения, и продолжить выполнять код.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670644
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13th* - а кстати, много народу знает об этом? Если, к примеру, было деление на 0, можно в обработчике скорректировать ошибку, вернуться в точку выполнения, и продолжить выполнять код.
Похоже, что в C# аналога нет...
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670666
Дядя Коля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Дядя Коля,
Какая смешная просьба).
У молодежи же нет авторитетов).
Это в раздел ПТ надо).
у этого авторитеты те кто книги пишет причем только заграничные
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670667
Дядя Коля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttДядя Коля,

При чём тут мнение? Не надо топить или не топить за исключения. Если в языке есть исключения, надо их использовать. Если нет, то коды. Это не вопрос религии или мнения.

Если в компанию в разработку на C# придёт хоть трижды авторитетный человек со своими кодами вместо исключений, то пойдёт сразу на рынок труда со всеми своими монатками и дебильным мнением.
на шарпе как раз, он также считает про людей юзающих исключения (так же в смысле что они унтерменши в профессиональном плане)
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670674
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дядя Коляна шарпе как раз, он также считает про людей юзающих исключения (так же в смысле что они унтерменши в профессиональном плане)

Лучше ориентироваться на Рихтера, он всё конкретно по полочкам разложил.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670679
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttЕсли в языке есть исключения, надо их использовать. Если нет, то коды. Это не вопрос религии или мнения.
Странно, раньше ты был другого мнения 20145877
hVosttИсключения не должны использоваться в ситуациях, которые ты ожидаешь. Например, некорректный ввод пользователя не должен порождать исключение.

...

Возврат и обработка ошибок не стоит делать через механизм исключений. Об этом написано у многих уважаемых авторов. И с опытом приходит понимание почему.

...

Я понимаю, что такие проверки делать лень, проще поймать обобщённый Exception и записать его в лог. Но это не показатель, ни качественной разработки, ни профессионализма.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670683
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

не вижу, как одна цитата противоречит другой
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670727
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё это фигня...
Следует возвращать OperationResult да и вообще писать в функциональном стиле
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670768
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LR13th* - а кстати, много народу знает об этом? Если, к примеру, было деление на 0, можно в обработчике скорректировать ошибку, вернуться в точку выполнения, и продолжить выполнять код.
Похоже, что в C# аналога нет...
Если под аналогом понимаются exception filters, то в 6.0 они появились , и вполне можно написать вот такое:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
class Program
{
  static void Main()
  {
    Console.WriteLine(Divide(0));
  }

  static int Divide(int divider)
  {
    try
    {
      return 100 / divider;
    }
    catch(DivideByZeroException) when(divider==0)
    {
      return Divide(1);
    }
  }
}
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670782
Дядя Коля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAВсё это фигня...
Следует возвращать OperationResult да и вообще писать в функциональном стиле
а какие аргументы?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670793
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima ThVosttЕсли в языке есть исключения, надо их использовать. Если нет, то коды. Это не вопрос религии или мнения.
Странно, раньше ты был другого мнения 20145877
hVosttИсключения не должны использоваться в ситуациях, которые ты ожидаешь. Например, некорректный ввод пользователя не должен порождать исключение.

...

Возврат и обработка ошибок не стоит делать через механизм исключений. Об этом написано у многих уважаемых авторов. И с опытом приходит понимание почему.

...

Я понимаю, что такие проверки делать лень, проще поймать обобщённый Exception и записать его в лог. Но это не показатель, ни качественной разработки, ни профессионализма.

Мда. Чукча не читатель?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670795
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAВсё это фигня...
Следует возвращать OperationResult да и вообще писать в функциональном стиле

Типа HttpResponseMessage?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670797
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAOperationResult

Как-то рефакторили блок с этими Result-ами. Из-за того, что исключительные ошибки также в Result складывались. Когда кому-то надоело ковыряться и обрабатывать то, что непонятно как обрабатывать.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670799
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Марксизм не догма, а руководство к действию.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670813
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сон Веры ПавловныЕсли под аналогом понимаются exception filters, то в 6.0 они появились , и вполне можно написать вот такое:

Лично я имел ввиду именно возобновление исполнения. exception filters - часть этого механизма. В твоём примере делается повторный вызов. В С++ - возобновление с точки исключения. Прямых аналогов, насколько я знаю, нет нигде.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670845
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дядя КоляskyANAВсё это фигня...
Следует возвращать OperationResult да и вообще писать в функциональном стиле
а какие аргументы?
Чистые функции. Легко тестировать. "Поезда" вызовов
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670847
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAВсё это фигня...
Следует возвращать OperationResult да и вообще писать в функциональном стиле

Типа HttpResponseMessage? Кстати простое отображение OperationResult на HttpResponseMessage с нужным кодом, вместо if-ов :)
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670849
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>hVostt, вчера, 21:20 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21547461][21547461]
>...Если в компанию в разработку на C# придёт хоть трижды авторитетный человек со своими кодами вместо исключений, то пойдёт сразу на рынок труда со всеми своими монатками и дебильным мнением.

Не могу с Вами согласиться. Многое зависит от задачи. Вот два примера:
1. Вызов удаленного метода (WCF) с возвратом информационного пакета. Инфопакет содержит код не штатной ситуации.
2. Вызов метода в рабочем потоке.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670851
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев1. Вызов удаленного метода (WCF) с возвратом информационного пакета. Инфопакет содержит код не штатной ситуации.
Так возвращается пакет, а не код.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670852
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAВМоисеев1. Вызов удаленного метода (WCF) с возвратом информационного пакета. Инфопакет содержит код не штатной ситуации.
Так возвращается пакет, а не код.То есть не тупо -1 и фиг знает, что там произошло
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670855
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>hVostt, вчера, 21:20 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21547461][21547461]
>...Если в компанию в разработку на C# придёт хоть трижды авторитетный человек со своими кодами вместо исключений, то пойдёт сразу на рынок труда со всеми своими монатками и дебильным мнением.

Не могу с Вами согласиться. Многое зависит от задачи. Вот два примера:
1. Вызов удаленного метода (WCF) с возвратом информационного пакета. Инфопакет содержит код не штатной ситуации.
2. Вызов метода в рабочем потоке.
hVostt 'у надо верить))).
WCF прекрасно сериализует исключения на клиента.
Ты не в курсе.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670860
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>skyANA, сегодня, 18:38 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21550572][21550572]
>То есть не тупо -1 и фиг знает, что там произошло
Здесь подробнее.
Возвращается пакет, содержащий 2-х байтный код выполнения метода.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670861
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Petro123, сегодня, 18:51 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21550618] [21550618]
>hVostt'у надо верить))).
Всё несколько сложнее, чем Вы представляете.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670862
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>Petro123, сегодня, 18:51 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21550618] [21550618]
>hVostt'у надо верить))).
Всё несколько сложнее, чем Вы представляете.
По топику видно, что идолов в IT нету. Всё на собственной шкуре, на собственной шкуре).
Щас он придет и ему расскажешь почему ему не надо, а тебе надо верить))
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670864
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>skyANA, сегодня, 18:38 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21550572][21550572]
>То есть не тупо -1 и фиг знает, что там произошло
Здесь подробнее.
Возвращается пакет, содержащий 2-х байтный код выполнения метода.
Не интересно, потому как не читабельно.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670867
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,

может сразу dump возвращать?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670868
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAВМоисеев>skyANA, сегодня, 18:38 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21550572][21550572]
>То есть не тупо -1 и фиг знает, что там произошло
Здесь подробнее.
Возвращается пакет, содержащий 2-х байтный код выполнения метода.
Не интересно, потому как не читабельно.
Нажал Ctrl + F, ввёл WCF, получил 0.
Классная иллюстрация вызова удалённого метода WCF, просто супер
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670870
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
теперь я понимаю, от куда порождаются ошибки типа окна с сообщением о том, что произошла ошибка неизвестная ошибка и программа должна быть закрыта =) по типу "Что то случилось".
Частенько на такое натыкаюсь в говнокодах. Что, где и почему нужно определять с помощью хрустального шара.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670873
Дядя Коля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAДядя Коляпропущено...

а какие аргументы?
Чистые функции. Легко тестировать. "Поезда" вызовов
Исключения
1. легко писать
2. многие функции все равно используют исключения, как например работа с базой данных
3. поезда вызовов - не знаю что такое но похоже на стэк трейс думаю.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670879
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesВМоисеев,

может сразу dump возвращать?
)))) LOL
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670881
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>skyANA, сегодня, 19:31 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21550676][21550676]
>Нажал Ctrl + F... Классная иллюстрация …

Вы о чём? В статье так:

Структура байтовой последовательности ответа в случае регистрации клиента
Ошибка - (двухбайтовый код ошибки)
Штатно - (0x00+0x00+IV)+[симметрично зашифрованное Info]
Структура Info ответа для регистрации:
[cmd клиента]+[guid аутентифицированного клиента]+[размер страницы]+[имя клиента]

Структура байтовой последовательности для общего случая информационного запроса/ответа:
Запрос:
(КС+IV+индекс группы команд)+[Info]
Структура Info запроса:
[idxПакет+индекс команды в группе+параметры команды]
Структура ответа:
Ошибка - (двухбайтовый код ошибки)
Штатно - (0x00+0x00+IV)+[Info]
В общем случае Info ответа содержит результирующий набор данных в виде отсортированного массива строк...
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670882
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Roman Mejtes, сегодня, 19:35 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21550681][21550681]
>Частенько на такое натыкаюсь в говнокодах.

Вот и пятачок прорезался
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670888
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дядя КоляskyANAпропущено...

Чистые функции. Легко тестировать. "Поезда" вызовов
Исключения
1. легко писать
2. многие функции все равно используют исключения, как например работа с базой данных
3. поезда вызовов - не знаю что такое но похоже на стэк трейс думаю.
Легко писать исключения? Интересно...
Тогда о чём топик? Если для Вас просто и понятно где нужно исключение и какое, и как оно будет обрабатываться
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670889
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>skyANA, сегодня, 19:31 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21550676][21550676]
>Нажал Ctrl + F... Классная иллюстрация …

Вы о чём? В статье так:

Структура байтовой последовательности ответа в случае регистрации клиента
Ошибка - (двухбайтовый код ошибки)
Штатно - (0x00+0x00+IV)+[симметрично зашифрованное Info]
Структура Info ответа для регистрации:
[cmd клиента]+[guid аутентифицированного клиента]+[размер страницы]+[имя клиента]

Структура байтовой последовательности для общего случая информационного запроса/ответа:
Запрос:
(КС+IV+индекс группы команд)+[Info]
Структура Info запроса:
[idxПакет+индекс команды в группе+параметры команды]
Структура ответа:
Ошибка - (двухбайтовый код ошибки)
Штатно - (0x00+0x00+IV)+[Info]
В общем случае Info ответа содержит результирующий набор данных в виде отсортированного массива строк...
И почему так? В чём плюсы? Кроме Вас с этим кто-то работает?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39670894
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>skyANA, сегодня, 20:37 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21550771][21550771]
>И почему так? В чём плюсы? Кроме Вас с этим кто-то работает?

Система не 3-х уровневая, а 5-ти.
Инфопакеты надо транспортировать между слоями, некоторым уровням не должно знать их структуру.
Никто. Проект умер.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671129
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевНе могу с Вами согласиться. Многое зависит от задачи. Вот два примера:
1. Вызов удаленного метода (WCF) с возвратом информационного пакета. Инфопакет содержит код не штатной ситуации.
2. Вызов метода в рабочем потоке.

1. Исключения это внутренний механизм. Несмотря на это они сериализуются и могут быть брошены внутри клиента если речь идёт об интеграции с внешним API.

Например, служба внешнего файлового хранилища, вместо System.IO используется некий REST API. Проблемы отсутствия файлов, отсутствия доступа, проблемы с сетью, с работой самой службы (она даже код не сможет вернуть, если сломалась) -- никуда не делись. Пример не подходит.

2. В чём проблема?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671130
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAКстати простое отображение OperationResult на HttpResponseMessage с нужным кодом, вместо if-ов :)

Ну дык. А проблемы с сетью? Чтобы не разрываться между двух огней, правильно было бы в ответ на код ошибки таки выбросить исключения. Обёртка клиента, осуществляющая вызовы API не должна транслировать коды HTTP ошибок, если по уму.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671142
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>hVostt, сегодня, 00:06 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21552946][21552946]

>1. Исключения это внутренний механизм…

Имеем цепочку: слой.1(клиент) <--> слой.2 <--> слой.3 <--> слой.4(сервер_приложений) <--> SQL_сервер.
Обмен между слоями идет инфопакетами, которые в слое могут накапливаться в очередях.
Ошибку SQL_сервера обрабатывает сервер_приложений, формирует инфопакет(первый байт которого не 0), который записывает в очередь слоя.3 и т.д.

>2. В чём проблема?
В эффективности и удобстве. Имеем:
1. Запрос на построение выборки:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
    . . .     
    //-- Получим информацию по объектам ВД
    lst_Entity = null;  lst_Entity = new List<row_Entity>();  //-- Список объектов ВД
    asp = new OracleParameter[2] {
      new OracleParameter("cur_viborka", OracleDbType.Cursor, ParameterDirection.Output),
      new OracleParameter("x_codstate", x_codstate)
    };
    wsp.Entity_SP("NCUYAO_GIS.get_ВД", asp, DbToRow);
    if (wsp.wspErr != null) {
    . . .
    //-- Строку выборки из базы данных отражаем на объект класса 
    private void DbToRow(IDataRecord record) {
      xrow = new row_Entity() {
        codobj = record.GetInt64(0),                                          //-- код объекта
        nameobj = record.GetString(1).Trim(),                            //-- Название объекта
        lat = бом.f_Lat(((string)record.GetString(2)).Trim()),       //-- широта места объектов ВД (float)
        lng = бом.f_Lng(((string)record.GetString(3)).Trim()),      //-- долгота места объектов ВД (float)
        kod = record.GetString(4).Trim(),                                    //-- код страны
      };    
      lst_Entity.Add(xrow);
    }
   . . .

2. Класс обработчик

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
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.
namespace wfa_Gis {
  public delegate void dlg_sp(dlg_RowToEntity RowToEntity);
  public delegate void dlg_RowToEntity(IDataRecord reader);

  public static class wsp {
    static OracleDataReader reader;
    public static string wspErr;

    //-- Обработка строк выборки select
    public static void sp_Sel(dlg_RowToEntity RowToEntity) {
      try { while (reader.Read()) { RowToEntity(reader); } }
      catch (System.InvalidOperationException ex) { wspErr = ex.Message; }
      catch (Exception ex) { wspErr = ex.Message; }
    }
    //-- Выполнение хранимой процедуры
    public static void Entity_SP(string spname, OracleParameter[] asp, dlg_RowToEntity RowToEntity) {
      reader = null;
      wspErr = null;

      try {
        using (OracleConnection connection = new OracleConnection(гп.oradb)) {
          connection.Open();
          OracleCommand command = new OracleCommand("", connection);
          command.Parameters.Clear();
          command.Parameters.AddRange(asp);
          command.CommandText = spname;
          command.CommandType = CommandType.StoredProcedure;

          using (reader = (OracleDataReader)command.ExecuteReader()) {
            //-- Формируем коллекцию из выборки
            sp_Sel(RowToEntity); //-- Обратный вызов
          }
        }
      }
      catch (Exception ex) { wspErr = ex.Message; }
    }
  }
}
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671143
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевИмеем цепочку: слой.1(клиент) <--> слой.2 <--> слой.3 <--> слой.4(сервер_приложений) <--> SQL_сервер.
Обмен между слоями идет инфопакетами, которые в слое могут накапливаться в очередях.
Ошибку SQL_сервера обрабатывает сервер_приложений, формирует инфопакет(первый байт которого не 0), который записывает в очередь слоя.3 и т.д.

В каждом слое могут быть свои ошибки. Каждый следующий слой должен кодировать свои ошибки + все ошибки поставщика? Плюс передавать по цепочке разнообразную информацию, которая может помочь правильно обработать ошибку, или хотя бы указать причину.

ВМоисеев2. Класс обработчик
ВМоисеев
Код: c#
1.
public static string wspErr;


ВМоисеев
Код: c#
1.
catch (Exception ex) { wspErr = ex.Message; }



Какой-то привет из девяностых, а не код.
Отвратительный код, не понятно, что с этим wspErr делать, пользователю показывать ошибки СУБД?
Даже если ваш заказчик/начальник понятия не имеет какого отвратительно качества код вы пишите, он всяко не обрадуется в UI сообщениям из СУБД.

И вы уж не принимайте на свой личный счёт. Просто код настолько плох, что у нас даже младшие разработчики (джуниоры), так писать не будут, ибо это стыд и позор.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671153
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

не переживай, он же написал, что проект умер и кроме нас его код никто и не видел
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671154
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAКстати простое отображение OperationResult на HttpResponseMessage с нужным кодом, вместо if-ов :)

Ну дык. А проблемы с сетью? Чтобы не разрываться между двух огней, правильно было бы в ответ на код ошибки таки выбросить исключения. Обёртка клиента, осуществляющая вызовы API не должна транслировать коды HTTP ошибок, если по уму.
А что проблемы с сетью? Почему правильно именно выбросить исключение?
Его же кто-то должен будет обработать. А если ему по барабану на твои проблемы с сетью?

Всё зависит от
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671155
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>skyANA, сегодня, 20:37 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21550771][21550771]
>И почему так? В чём плюсы? Кроме Вас с этим кто-то работает?

Система не 3-х уровневая, а 5-ти.
Инфопакеты надо транспортировать между слоями, некоторым уровням не должно знать их структуру.
Какая разница что не 3, а 5 слоёв? У меня к примеру их 9.

В C# коде можете показать как выглядить Ваш Info-пакет?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671156
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевОшибку SQL_сервера обрабатывает сервер_приложений, формирует инфопакет(первый байт которого не 0), который записывает в очередь слоя.3 и т.д.ВМоисеев
Код: c#
1.
public static string wspErr;


Код: c#
1.
2.
catch (System.InvalidOperationException ex) { wspErr = ex.Message; }
catch (Exception ex) { wspErr = ex.Message; }


Код: c#
1.
2.
3.
wsp.Entity_SP("NCUYAO_GIS.get_ВД", asp, DbToRow);
    if (wsp.wspErr != null) {
    . . .



И где тут "инфопакет(первый байт которого не 0)" и "очередь слоя.3"?
Вижу только статическую строковую переменную, в которую пишется текст ошибки.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671158
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,

а, я понял, Вы прямо в поток пишите массивы байт.
В случае ошибки пишете к примеру new byte[2]{4,10} .

Почему решили изобрести свой велосипед, а не взяли к примеру Protocol Buffers ?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671176
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>hVostt, сегодня, 03:02 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21553231] [21553231]
>... Каждый следующий слой должен кодировать свои ошибки + все ошибки поставщика?...
Да. Поэтому в крайних версиях пакет ошибки есть byte[???] без шифрования, младший байт которого не равен 0. Содержит код слоя, индекс группы методов, индекс метода в группе, номер шага в алгориме метода и код ошибки. Но не соль, отвлекаемся. Важно, в этой схеме нельзя передать исключение в предыдущий слой.

>...Отвратительный код, не понятно, что с этим wspErr делать…
Блестящий код - компактен, быстр, обозрим, ничего лишнего и нет гирь, типа а-ля EF. Тоже, что и с исключением

Понимаю, что жующие жёлуди, не заценят апельсин.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671182
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>skyANA, сегодня, 09:25 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21553322][21553322]
>И где тут "инфопакет(первый байт которого не 0)" и "очередь слоя.3"?...
Как то Вы всё в одну кучу. На это здесь привел два примера из разных систем, на мой взгляд делающие тезис hVostt не состоятельным.
В первом случае нет возможности возвратить исключение, во втором - овчинка выделки не стоит, особенно в этом случае:
await Task.Run(() =>wsp.Entity_SP("NCUYAO_GIS.get_ВД", asp, DbToRow));
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671187
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>skyANA,сегодня, 09:38 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21553329][21553329]
>а, я понял, Вы прямо в поток пишите массивы байт…
Не совсем так. В общем случае, обращение к другому слою есть вызов удаленного метода WCF сервиса этого слоя:
byte[] wcf_Мд(byte[]);
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671192
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>skyANA, сегодня, 09:20 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21553320] [21553320]
>...В C# коде можете показать как выглядить Ваш Info-пакет?...

Да ради бога:
//=======================================================================
//-- Виды сообщений-запросов, направляемых головному серверу репликации
//=======================================================================

//-- 1. Байтовая строка сообщения-запроса на получение временного параметра
//-- idxСессия{1}+ivСообщения{8})+RSA(keyСессия){128})+Encoder(idxКласс{2}+idxМетод{2}){?}
//-- idxСессия=(byte)255;
//-- idxКласс=(short)0;
//-- idxМетод=0

//-- 2. Байтовая строка сообщения-запроса на получение индекса сессии
//-- idxСессия{1}+ivСообщения{8}+RSA(keyСессия){128}+Encoder(idxКласс{2}+idxМетод{2}+idxСессия{1}+ВП1{8}+ВП2{8}){?}
//-- idxСессия(левая)=(byte)255;
//-- idxСессия(правая)=(byte)? (0<=?<255);
//-- idxКласс=(short)0;
//-- idxМетод=(short)1
//-- ВП1 - время формирования головным сервером репликаций сообшения-ответа
//-- ВП2 - время формирования периферийным сервером репликаций сообшения-запроса

//-- 3. Байтовая строка сообщения-запроса на передачу сообщения от периферийного к головному
//-- idxСессия{1}+ivСообщения{8}+Encoder(Компрессор(idxТип{1}+idxКласс{2}+idxМетод{2}+btПараметры{?}){?}){?}
//-- idxТип=(byte)0;
//-- idxСессия=(byte)? (0<=?<255);
//-- idxКласс=(short)?
//-- idxМетод=(short)?

//-- 4. Байтовая строка сообщения-запроса на передачу сообщения от головного к периферийному
//-- idxСессия{1}+ivСообщения{8}+Encoder(Компрессор(idxТип{1})){?}
//-- idxТип=(byte)255;

//-- 5. Байтовая строка ошибки
//-- btErr{?}
//-- btErr[0]!=(byte)0

//-- Виды сообщений-ответа, возвращаемых головным сервером репликации для периферийного сервера репликаций
//--------------------------------------------------------------------------------------------------------
//-- 1. Не ошибка
//-- btErr{1}+ivСообщения[8])+Encoder(Компрессор(idxКласс{2}+idxМетод{2}+btПараметры{?}){?}){?}
//-- btErr[0]=0;
//-- idxКласс=(short)?
//-- idxМетод=(short)?
//-- 2. Байтовая строка ошибки
//-- btErr{?}
//-- btErr[0]!=(byte)0

//-- Вид сообщений-запросов генерируемых сервером приложения для периферийного сервера репликаций
//-----------------------------------------------------------------------------------------------
//-- Info <-- Компрессор(idxКласс{2}+idxМетод{2}+btПараметры{?}){?}
//-- idxКласс=(short)?
//-- idxМетод=(short)?

//-- Виды сообщений-ответа, возвращаемых периферийным сервером репликации для сервера приложения
//--------------------------------------------------------------------------------------------------------
//-- 1. Не ошибка
//-- btErr{1}=(byte)0;
//-- 2. Байтовая строка ошибки
//-- btErr{?}
//-- btErr[0]!=(byte)0


или Вас интересует программный код формирования
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671196
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>skyANA, сегодня, 09:20 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21553320][21553320]
>Какая разница что не 3, а 5 слоёв? У меня к примеру их 9...

Какую информацию Вы передаете между слоями? У меня упакованный шифрованный инфопакет (byte[]).
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671200
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исключения... коды возвратов.... с рукожопами что делать?
1) Вчера качаю мозиллой файл, кончается место на целевом диске. Если открыть список, напротив закачки появляется Failed. И все. Хрен знает, в чем проблема, думал сервер не отдает, пытался перезапускать, открывал заново и начинал качать заново, прежде чем дошло.
2) Сегодня передаю файл через TeamViewer. В целевой папке такой файл уже есть, я расчитывал просто подтверить перезапись. Хрен. Никаких ошибок, висит задание, прогресс 0%, никаких сообщений.

А ведь это не студенческие поделки....
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671201
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>hVostt, сегодня, 03:02 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21553231] [21553231]
>... Каждый следующий слой должен кодировать свои ошибки + все ошибки поставщика?...
Да. Поэтому в крайних версиях пакет ошибки есть byte[???] без шифрования, младший байт которого не равен 0. Содержит код слоя, индекс группы методов, индекс метода в группе, номер шага в алгориме метода и код ошибки. Но не соль, отвлекаемся. Важно, в этой схеме нельзя передать исключение в предыдущий слой.

>...Отвратительный код, не понятно, что с этим wspErr делать…
Блестящий код - компактен, быстр, обозрим, ничего лишнего и нет гирь, типа а-ля EF. Тоже, что и с исключением

Понимаю, что жующие жёлуди, не заценят апельсин.
Нет, код реально не читаемый и плохой.
Почитайте что-нибудь по принципы проектирования кода, про чистый код, красивый код, совершенный код, идеальный код.
Написано об этом для инженеров, а не свиней, про которых Вы тут нелепо намекаете.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671207
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProИсключения... коды возвратов.... с рукожопами что делать?
1) Вчера качаю мозиллой файл, кончается место на целевом диске. Если открыть список, напротив закачки появляется Failed. И все. Хрен знает, в чем проблема, думал сервер не отдает, пытался перезапускать, открывал заново и начинал качать заново, прежде чем дошло.
2) Сегодня передаю файл через TeamViewer. В целевой папке такой файл уже есть, я расчитывал просто подтверить перезапись. Хрен. Никаких ошибок, висит задание, прогресс 0%, никаких сообщений.

А ведь это не студенческие поделки....
Что делать, что делать. Таски заводить на исправление
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671208
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>skyANA, сегодня, 09:20 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21553320][21553320]
>Какая разница что не 3, а 5 слоёв? У меня к примеру их 9...

Какую информацию Вы передаете между слоями? У меня упакованный шифрованный инфопакет (byte[]).
Разную. И текстовую, и бинарную.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671211
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И шифрованную
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671217
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,

а зачем ты эту портянку передаешь?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671220
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>skyANA, сегодня, 12:38 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21553631][21553631]
>Нет, код реально не читаемый и плохой.

1. Хороший, плохой... Где критерии. Приведите Ваш код. Задача то хорошо формализована - получить выборку из базы, вызвав хранимую процедуру в ней.

2. Не я начинаю
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671224
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>skyANA, сегодня, 12:49 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21553669][21553669]
>И шифрованную…
Как?
У меня обмен информацией в следующим слоем есть вызов удаленного метода WCF_сервиса: byte[] wcf_Мд(byte[]);
Метод возвратит либо ошибку, либо полезную информацию.
У Вас?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671226
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>skyANA, сегодня, 12:38 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21553631][21553631]
>Нет, код реально не читаемый и плохой.

1. Хороший, плохой... Где критерии.Принципы SOLID, тестируемость, читаемость...

ВМоисеевПриведите Ваш код. Задача то хорошо формализована - получить выборку из базы, вызвав хранимую процедуру в ней.Приводил уже и Вам понравилось: 20604487

ВМоисеев2. Не я начинаюИменно Вы переходите на личности, хотя критика звучит в сторону кода, а не Вас лично.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671228
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>ViPRos, сегодня, 13:18 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21553721][21553721]
>а зачем ты эту портянку передаешь?

Вы о чем?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671230
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>skyANA, сегодня, 12:49 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21553669][21553669]
>И шифрованную…
Как?Да по разному... на базе MD5, SHA-1, SHA-256, RNG и RSA

ВМоисеевУ меня обмен информацией в следующим слоем есть вызов удаленного метода WCF_сервиса: byte[] wcf_Мд(byte[]);
Метод возвратит либо ошибку, либо полезную информацию.
У Вас?Есть и WCF, и REST API, и очереди...
Сейчас вот GraphQL пробуем, там ExecutionResult
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671233
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>skyANA, сегодня, 13:45
>Принципы SOLID, тестируемость, читаемость..
>Приводил уже и Вам понравилось:...
Рассматривая Ваш код, не понимаю, в каком потоке он будет выполняться и смогу ли показать ПрогресБар в UI потоке.
Не понимаю, как формируется контекст. Какую программную гирю Вы добавляете в Ваш код, EF?
Но не называю этот код плохим или …
Вам же показываю рабочий код.

>Именно Вы переходите на личности…
Вы не внимательно читали Трех мушкетёров Дюма.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671234
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>skyANA, сегодня, 13:56 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21553777][21553777]
>Есть и WCF, и REST API, и очереди…
Да меня не это интересует. Есть клиент, обменивающийся информацией с географически удаленным 1-ым слоем.
Что есть обмен?
У меня byte[] wcf_Мд(byte[]);
У Вас что?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671240
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>skyANA, сегодня, 13:45
>Принципы SOLID, тестируемость, читаемость..
>Приводил уже и Вам понравилось:...
Рассматривая Ваш код, не понимаю, в каком потоке он будет выполняться и смогу ли показать ПрогресБар в UI потоке.
Не понимаю, как формируется контекст. Какую программную гирю Вы добавляете в Ваш код, EF?
Показать ProgressBar сможете показать.
Гирь там нет, там же написано:
Код: c#
1.
var command = new SqlCommand("sp_application_select") { CommandType = CommandType.StoredProcedure };


Хорошо, для Вас напишу так, чтобы было понятнее:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
using Context = ApplicationQueryContext;

public class ApplicationQuery : OracleQuery<Context, Application>
{
    protected override IDbCommand CreateCommand(Context context)
    {
        var command = new OracleCommand("sp_application_select") { CommandType = CommandType.StoredProcedure };

        command.Parameters.Add(new OracleParameter("guid", context.Guid));
        command.Parameters.Add(new OracleParameter(""name", context.Name));

        return command;
    }

    protected override Application ToResult(IDataRecord record)
    {
        return new Application { ... };
    }
}};
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671241
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>skyANA, сегодня, 13:56 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21553777][21553777]
>Есть и WCF, и REST API, и очереди…
Да меня не это интересует. Есть клиент, обменивающийся информацией с географически удаленным 1-ым слоем.
Что есть обмен?
У меня byte[] wcf_Мд(byte[]);
У Вас что?
Сигнатура метода что-ли нужна? Их не один.

Ну к примеру простое получение списка валют: Task<List<Currency>> GetCurrenciesAsync().
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671260
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>skyANA, сегодня, 14:20 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21553838][21553838]
>Хорошо, для Вас напишу так, чтобы было понятнее:
Мне понятнее не стало.
У меня для полного описания решения задачи получения выборки из базы данных хранимой процедурой, к надо добавить только класс сущности, который обычно определяется внутри другого класса:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
    public class row_Entity {
      private long _codobj;   //-- Код объекта ВД
      private string _nameobj;  //-- Имя объекта ВД 
      private float _lng;      //-- Долгота(x) объекта ВД (float) 
      private float _lat;      //-- Широта(y) объекта ВД (float)
      private string _kod;      //-- Код страны 
      private ushort _idxg;     //-- индекс группы

      public long codobj {
        get { return _codobj; }
        set { _codobj = value; }
      }
      public string nameobj {
        get { return _nameobj; }
        set { _nameobj = value; }
      }
      public float lng {
        get { return _lng; }
        set { _lng = value; }
      }
      public float lat {
        get { return _lat; }
        set { _lat = value; }
      }
      public string kod {
        get { return _kod; }
        set { _kod = value; }
      }
      public ushort idxg {
        get { return _idxg; }
        set { _idxg = value; }
      }
    }


И это всё, и никаких дополнительных библиотек.
Есть некоторые тонкости - в базе широта и долгота хранится не формате float, и сущность не совпадает со строкой выборки, ну а в остальном, прекрасная маркиза...
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671264
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAА что проблемы с сетью? Почему правильно именно выбросить исключение?
Его же кто-то должен будет обработать. А если ему по барабану на твои проблемы с сетью?

Всё зависит от

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

Конечно зависит от. Но превращать исключительные ситуации в коды возврата, игнорируя механизмы исключений, которые дают больше информации об ошибке и месте её возникновения, считаю неправильным.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671266
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевДа. Поэтому в крайних версиях пакет ошибки есть byte[???] без шифрования, младший байт которого не равен 0. Содержит код слоя, индекс группы методов, индекс метода в группе, номер шага в алгориме метода и код ошибки. Но не соль, отвлекаемся. Важно, в этой схеме нельзя передать исключение в предыдущий слой.

Почему нельзя?


ВМоисеевБлестящий код - компактен, быстр, обозрим, ничего лишнего и нет гирь, типа а-ля EF. Тоже, что и с исключением

Там дело не исключениях. А в умышленном вредительстве.


ВМоисеевПонимаю, что жующие жёлуди, не заценят апельсин.

Просил же на свой счёт не принимать. Или теперь поклоняться говнокодерам, ибо они пишут от бога, и чтобы понять их творчество надо перейти на определённый уровнь, с помощью зверской наркоты, так чтоли? ))))
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671269
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>skyANA, сегодня, 14:20 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21553838][21553838]
>Хорошо, для Вас напишу так, чтобы было понятнее:
Мне понятнее не стало.
У меня для полного описания решения задачи получения выборки из базы данных хранимой процедурой, к надо добавить только класс сущности, который обычно определяется внутри другого класса:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
    public class row_Entity {
      private long _codobj;   //-- Код объекта ВД
      private string _nameobj;  //-- Имя объекта ВД 
      private float _lng;      //-- Долгота(x) объекта ВД (float) 
      private float _lat;      //-- Широта(y) объекта ВД (float)
      private string _kod;      //-- Код страны 
      private ushort _idxg;     //-- индекс группы

      public long codobj {
        get { return _codobj; }
        set { _codobj = value; }
      }
      public string nameobj {
        get { return _nameobj; }
        set { _nameobj = value; }
      }
      public float lng {
        get { return _lng; }
        set { _lng = value; }
      }
      public float lat {
        get { return _lat; }
        set { _lat = value; }
      }
      public string kod {
        get { return _kod; }
        set { _kod = value; }
      }
      public ushort idxg {
        get { return _idxg; }
        set { _idxg = value; }
      }
    }



И это всё, и никаких дополнительных библиотек.
Есть некоторые тонкости - в базе широта и долгота хранится не формате float, и сущность не совпадает со строкой выборки, ну а в остальном, прекрасная маркиза...
Что конерктно Вам не понятно в том, как получается выборка из базы?
Получается она также как и у Вас: через OracleCommand, без дополнительных библиотек.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671270
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAА что проблемы с сетью? Почему правильно именно выбросить исключение?
Его же кто-то должен будет обработать. А если ему по барабану на твои проблемы с сетью?

Всё зависит от

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

Конечно зависит от. Но превращать исключительные ситуации в коды возврата, игнорируя механизмы исключений, которые дают больше информации об ошибке и месте её возникновения, считаю неправильным.
Амн, какие ещё коды возврата?

Выше давал ссылку на
https://github.com/graphql-dotnet/graphql-dotnet/blob/master/src/GraphQL/Execution/ExecutionResult.cs

Где там игнорируются механизмы, что дают больше информации об ошибке и месте её возникновения?

Вот ещё пример:
http://docs.couchbase.com/sdk-api/couchbase-net-client-2.4.7/html/bd17533f-918e-a167-40ae-89be88a341be.htm
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671276
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАмн, какие ещё коды возврата?

Ну речь-то про них шла с начала топика :)

skyANAВыше давал ссылку на
https://github.com/graphql-dotnet/graphql-dotnet/blob/master/src/GraphQL/Execution/ExecutionResult.cs

Где там игнорируются механизмы, что дают больше информации об ошибке и месте её возникновения?

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

skyANAВот ещё пример:
http://docs.couchbase.com/sdk-api/couchbase-net-client-2.4.7/html/bd17533f-918e-a167-40ae-89be88a341be.htm

Тоже самое. Тем более, лично я считаю, что надо разделять низкоуровневый API и высокоуровневый. Низкоуровневый возвращает OperationResult, высокоуровневый сразу нужный результат или исключение. Но так как, именно в этом случае, результат это больше, чем Value, то совместили.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671277
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttчто надо разделять низкоуровневый API и высокоуровневый. Низкоуровневый возвращает OperationResult

Имеется в виду клиент API (н-р, Couchbase.NetClient.dll)
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671284
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>hVostt, сегодня, 16:42 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21554058][21554058]

>Почему нельзя?
Дело в том, что 3-й слой является временным хранилищем информационных пакетов запросов/ответов.
Сервисы 2-го уровня записывают пакеты запроса в хранилище 3-го уровня, используя вызов удаленного метода и ждут инфопакета результата запроса.
Сервисы 4-го уровня (пул серверов приложений) забирают пакет из хранилища и реализуют обработку запроса и записывают пакет результата (ответа) на место пакета запроса.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671286
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttПочему нельзя?
Потому как сделал человек так, как сделал.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671287
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>skyANA, сегодня, 16:48 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21554069][21554069]
>Что конерктно Вам не понятно в том, как получается выборка из базы?
Где задаётся описание строки выборки, где задается описание сущности, где задаётся код отражения строки на сущность, где задаётся поток в котором выполняется обработка запроса.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671288
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAВыше давал ссылку на
https://github.com/graphql-dotnet/graphql-dotnet/blob/master/src/GraphQL/Execution/ExecutionResult.cs

Где там игнорируются механизмы, что дают больше информации об ошибке и месте её возникновения?Клиент, осуществляющий доступ к API, мог бы инициировать своё исключение при получении структуры, у которой заполнены Errors. Но не обязан, это и правда зависит от того как это используется, и не запарит ли разработчиков при каждом чихе ковырять эту структуру на предмет наличия ошибок.

skyANAВот ещё пример:
http://docs.couchbase.com/sdk-api/couchbase-net-client-2.4.7/html/bd17533f-918e-a167-40ae-89be88a341be.htm Тоже самое. Тем более, лично я считаю, что надо разделять низкоуровневый API и высокоуровневый. Низкоуровневый возвращает OperationResult, высокоуровневый сразу нужный результат или исключение. Но так как, именно в этом случае, результат это больше, чем Value, то совместили.При каждом чихе ковырять?
Если всё штатно работает, то ничего ковырять и не надо, а если возникла внештатная ситуация, считай исключение, то ковырять ровно столько же, что и при подходе с исключениями.

Другой вопрос, а должна-ли как-то отражаться на работе приложения какая-либо аварийная ситуация в Couchbase, должно-ли оно об этом сигнализировать?
ИМХО не должна, так как логика не зависит от Couchbase. А сигнализирует хелсчек.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671302
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>skyANA, сегодня, 16:48 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21554069][21554069]
>Что конерктно Вам не понятно в том, как получается выборка из базы?
Где задаётся описание строки выборки, где задается описание сущности, где задаётся код отражения строки на сущность, где задаётся поток в котором выполняется обработка запроса.
Хорошо, давайте возьмём Ваш код и перепишем, реализуя для простоты интерфейс:
Код: c#
1.
2.
3.
4.
public interface IQuery<TContext, TResult>
{
    List<TContext> Ask(TContext context);
}


Получаем в первом приближении:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
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.
public class EntityQuery : IQuery<EntityQueryContext, Entity>
{
    public List<Entity> Ask(EntityQueryContext context)
    {
        using (var connection = new OracleConnection(гп.oradb))
        {
            connection.Open();

            var command = CreateCommand(context);
            var list = new List<Entity>();

            command.Connection = connection;

            using (var reader = command.ExecuteReader())
            {
                while (reader.Reader)
                {
                    list.Add(ToResult(reader));
                }
            }
        }
    }

    private IDbCommand CreateCommand(EntityQueryContext context)
    {
        var command = new OracleCommand("NCUYAO_GIS.get_ВД") { CommandType = CommandType.StoredProcedure };

        command.Parameters.Add(new OracleParameter("cur_viborka", OracleDbType.Cursor, ParameterDirection.Output));
        command.Parameters.Add(new OracleParameter("x_codstate", context.CodeState);

        return command;
    }

    private Entity ToResult(IDataRecord record)
    {
        retrurn new Entity
        {
            Code = record.GetInt64(0),
            Name = record.GetString(1).Trim(),
            Latitude = бом.f_Lat((record.GetString(2)).Trim()),
            Longitude = бом.f_Lng((record.GetString(3)).Trim()),
            CountryCode = record.GetString(4).Trim()
        };
    }
}


И используем:
Код: c#
1.
2.
3.
4.
5.
. . .     
//-- Получим информацию по объектам ВД
var query = new EntityQuery();
var queryContext = new EntityQueryContext {  CodeState = . . . };
var lst_Entity = query.Ask(queryContext);
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671304
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,

метод Ask по сути одинаков для всех реализаций IQuery на базе OracleClient , так что выносим его в базовый класс OracleQuery
плюс private методы делаем protected , и получаем:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
public class EntityQuery : OracleQuery<EntityQueryContext, Entity>
{
    protected override IDbCommand CreateCommand(EntityQueryContext context)
    {
        var command = new OracleCommand("NCUYAO_GIS.get_ВД") { CommandType = CommandType.StoredProcedure };

        command.Parameters.Add(new OracleParameter("cur_viborka", OracleDbType.Cursor, ParameterDirection.Output));
        command.Parameters.Add(new OracleParameter("x_codstate", context.CodeState);

        return command;
    }

    protected override Entity ToResult(IDataRecord record)
    {
        return new Entity
        {
            Code = record.GetInt64(0),
            Name = record.GetString(1).Trim(),
            Latitude = бом.f_Lat((record.GetString(2)).Trim()),
            Longitude = бом.f_Lng((record.GetString(3)).Trim()),
            CountryCode = record.GetString(4).Trim()
        };
    }
}
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671305
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поправил:
Код: c#
1.
2.
3.
4.
public interface IQuery<TContext, TResult>
{
    List<TResult> Ask(TContext context);
}
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671307
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поправил:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
    public List<Entity> Ask(EntityQueryContext context)
    {
        using (var connection = new OracleConnection(гп.oradb))
        {
            connection.Open();

            var command = CreateCommand(context);
            var list = new List<Entity>();

            command.Connection = connection;

            using (var reader = command.ExecuteReader())
            {
                while (reader.Reader)
                {
                    list.Add(ToResult(reader));
                }
            }

            return list;
        }
    }
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671312
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAПри каждом чихе ковырять?
Если всё штатно работает, то ничего ковырять и не надо, а если возникла внештатная ситуация, считай исключение, то ковырять ровно столько же, что и при подходе с исключениями.

В смысле? Вот API при успешном результате возвращает некий объект, а при неуспешном null, это исключительная ситуация, если у меня таких вызовов очень много, код будет кишить if...else, я могу поставить обработку исключений, так как зачастую исключение означает, что ты мало что можешь сделать полезного, кроме как уведомить, записать в лог, и вернуть состояние к тому как было. Зачем мне этот шквал проверок, а не сломалось ли чего, если оно не должно ломаться.

Опять таки, я говорю не про штатные ошибки, типа кривого ввода, или нарушение каких-то бизнес-правил.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671313
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttя могу поставить обработку исключений

* на блок кода, а не для каждого вызова
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671314
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAДругой вопрос, а должна-ли как-то отражаться на работе приложения какая-либо аварийная ситуация в Couchbase, должно-ли оно об этом сигнализировать?
ИМХО не должна, так как логика не зависит от Couchbase. А сигнализирует хелсчек.

Сломаться может посередине многоступенчатого процесса. И что тогда? Опять таки, на стороне Couchbase может и не быть проблем, проблемы могут быть в некорректном коде вызова, который привёл к ошибке, очевидно это ошибка программиста. Он что сам себя страхует миллионом if...else?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671320
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>skyANA, сегодня, 20:14 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21554332][21554332]
>И используем:
Спасибо. Но остаюсь при своём.
Потом, не нашёл определение Entity, а по сему код в
private Entity ToResult(IDataRecord record)
подвисает в воздухе.
В моём варианте методы класса обслуживают все запросы хранимых процедур.
И где обработка не штатных ситуаций, и в каком потоке работает Ваш код?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671327
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAИ используем:
Код: c#
1.
2.
3.
4.
5.
. . .     
//-- Получим информацию по объектам ВД
var query = new EntityQuery();
var queryContext = new EntityQueryContext {  CodeState = . . . };
var lst_Entity = query.Ask(queryContext);



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

это не работает.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671341
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>skyANA, сегодня, 20:14 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21554332][21554332]
>И используем:
Спасибо. Но остаюсь при своём.
Потом, не нашёл определение Entity, а по сему код в
private Entity ToResult(IDataRecord record)
подвисает в воздухе.
В моём варианте методы класса обслуживают все запросы хранимых процедур.
И где обработка не штатных ситуаций, и в каком потоке работает Ваш код?
Мда, могли бы и догадаться, что Entity - это Ваш тип row_Entity, просто подрихтованный.
Обработка не штатных ситуаций? А где она у Вас? try catch и Message в переменную? Дак заверните, где Вам угодно.
В каком потоке? Аналогично Вашему коду.

Я прекрасно понимаю, что делает Ваш код.
И пишу, что эту задачу решил бы иначе, чтобы ослабить зацепление, усилить связности и избежать проблем с сопровождением и тестированием.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671343
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAПри каждом чихе ковырять?
Если всё штатно работает, то ничего ковырять и не надо, а если возникла внештатная ситуация, считай исключение, то ковырять ровно столько же, что и при подходе с исключениями.

В смысле? Вот API при успешном результате возвращает некий объект, а при неуспешном null, это исключительная ситуация, если у меня таких вызовов очень много, код будет кишить if...else, я могу поставить обработку исключений, так как зачастую исключение означает, что ты мало что можешь сделать полезного, кроме как уведомить, записать в лог, и вернуть состояние к тому как было. Зачем мне этот шквал проверок, а не сломалось ли чего, если оно не должно ломаться.

Опять таки, я говорю не про штатные ошибки, типа кривого ввода, или нарушение каких-то бизнес-правил.на практике код не кишит if...else, нет шквала проверок
так как действительно мало, что можешь сделать, да и не требуется
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671345
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAИ используем:
Код: c#
1.
2.
3.
4.
5.
. . .     
//-- Получим информацию по объектам ВД
var query = new EntityQuery();
var queryContext = new EntityQueryContext {  CodeState = . . . };
var lst_Entity = query.Ask(queryContext);




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

это не работает.думаю если бы проект не умер, то через годик другой он бы сам осознал, что представляет из себя его блестящий код
Классика
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671364
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAЧто делать, что делать. Таски заводить на исправление Толку то. Это подход. Люди просто забили на обработку исключений.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671370
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProskyANAЧто делать, что делать. Таски заводить на исправление Толку то. Это подход. Люди просто забили на обработку исключений.Зачем их обрабатывать? Их надо логировать , по возможности где-то в одном месте. А обрабатывать, обычно, только с целью добавления диагностической информации .

Код: c#
1.
2.
3.
4.
catch (Exception err)
{
    throw new MyCustomException("При выполнении операции XXX случилось страшное.", err);
}
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671371
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЗачем их обрабатывать? Их надо логировать , по возможности где-то в одном месте. А обрабатывать, обычно, только с целью добавления диагностической информации .То есть пользователю причину знать необязательно? ))
Еще раз - такие проблемы как
а) кончилось место на диске
б) файл с таким именем уже существует
вместо выдачи какого-то сообщения для пользователя привели к введению приложения в ступор. Ну и какие логи должен смотреть рядовой пользователь?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671372
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProskyANAЧто делать, что делать. Таски заводить на исправление Толку то. Это подход. Люди просто забили на обработку исключений.
Что значит забили?
В предыдущих версиях Mozilla и TeamViewer обрабатывали, а потом забили?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671373
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

Хрен знает. Я вот как пользователь столкнулся с фактом. Проводить всякие тесты на локализацию проблемы желания не было.
Я к тому, что это последнее время стало общим местом, и чем дальше - тем хуже.
Тут купил новый бук с Win10 - вообще охреневаю от невменяемости диагностических сообщений.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671374
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProАлексей КЗачем их обрабатывать? Их надо логировать , по возможности где-то в одном месте. А обрабатывать, обычно, только с целью добавления диагностической информации .То есть пользователю причину знать необязательно? ))
Еще раз - такие проблемы как
а) кончилось место на диске
б) файл с таким именем уже существуетЯ как раз и написал про добавление диагностической информации. См. красный текст и пример кода.
Shocker.Proвместо выдачи какого-то сообщения для пользователя привели к введению приложения в ступор. Ну и какие логи должен смотреть рядовой пользователь?MessageBox на экране для пользователя я рассматриваю как один из вариантов логирования. Если такой подход кажется слишком необычным, то я не настаиваю, можно обозвать отображение MessageBox другим словом.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671375
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProТо есть пользователю причину знать необязательно? ))
Ты забыл или не знал что причины делятся на уровни.
Некоторые надо.
А некоторые не надо т.к. нужен только Факт.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671376
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Ты забыл или не знал что причины делятся на уровни.По моему опыту, исключения делятся на две больших категории
- внутренние ошибки программы, тогда пользователю выдается типа "что-то сломалось", "отправить проблему разработчику" и т.п.
- пользовательские, когда пользователю показывается вменяемое или относительно вменяемое сообщение "сервер недоступен (с кнопочкой "подробнее")", "ошибка записи файла (а лучше с расшифровкой)" и т.п., предполагается, что пользователь может попытаться сам исправить проблему.

К сожалению, это мало кто стал делать, в современных программах. Хотя еще лет десять назад я видел по косвенным признакам, что разрабы делали такое разделение
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671380
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Да.
Только сейчас произошла катастрофа.
Пришел веб.
А там правила другие. Большинство исключений не стало нужно выводить юзверю.
Ну, зацепило и десктоп. И операционки.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671381
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAна практике код не кишит if...else, нет шквала проверок
так как действительно мало, что можешь сделать, да и не требуется

Ну это понятно, что на практике вызовов мало, что это проблемы не вызывает.
Для наших микро-сервисов мы используем Swagger и AutoRest, который генерит
низкоуровневый API клиент, т.е. именно OperationResult. Его использовать напрямую
неудобно. Даже если вызовов мало, это требует большего контроля со стороны
разработчиков, поэтому пишутся высокоуровневые обёртки, которые во-первых
убирают прямую зависимоть от конкретного генератора, и скрывают подробности
реализации. Потребители не знают, что там, REST, SOAP или что-то ещё.

По личному опыту, так получается лучше, чище, и удобней. При ошибках бросаются
исключения, они документируются, решарпер подсказывает, что здесь может быть
ошибка, контракты работают хорошо.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671383
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProskyANA,

Хрен знает. Я вот как пользователь столкнулся с фактом. Проводить всякие тесты на локализацию проблемы желания не было.
Я к тому, что это последнее время стало общим местом, и чем дальше - тем хуже.
Тут купил новый бук с Win10 - вообще охреневаю от невменяемости диагностических сообщений.
Дак давайте обратную связь вендору. Понижайте его NPS.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671385
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAна практике код не кишит if...else, нет шквала проверок
так как действительно мало, что можешь сделать, да и не требуется

Ну это понятно, что на практике вызовов мало, что это проблемы не вызывает.
Для наших микро-сервисов мы используем Swagger и AutoRest, который генерит
низкоуровневый API клиент, т.е. именно OperationResult. Его использовать напрямую
неудобно. Даже если вызовов мало, это требует большего контроля со стороны
разработчиков, поэтому пишутся высокоуровневые обёртки, которые во-первых
убирают прямую зависимоть от конкретного генератора, и скрывают подробности
реализации. Потребители не знают, что там, REST, SOAP или что-то ещё.

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

Вот отвалился микросервис, то есть к примеру operationResult.Success - false, operationResult.StatusCode - TransportFailed, operationResult.Exception - все подробности о произошедшем
И что ты будешь делать?
Кидать своё исключение, куда завернёшь operationResult.Exception?
При отвал отдельного микросервиса не должен приводить к отвалу системы в целом.
То есть надо перехватить своё же исключение и, грубо говоря, завернуть предварительно залогировав.

Не, ну можно конечно, но по мне так оверхед.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671386
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAКидать своё исключение, куда завернёшь operationResult.Exception ?Да хоть в самодельное свойство, хоть в InnerException...
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671387
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAТо есть надо перехватить своё же исключение и, грубо говоря, завернуть предварительно залогировав.Зачем? Логирование, стандартно, организовать где-нибудь на уровне системной библиотеки, используемой для коммуникации (WebAPI, WCF и т. п.).
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671388
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAВот отвалился микросервис, то есть к примеру operationResult.Success - false, operationResult.StatusCode - TransportFailed, operationResult.Exception - все подробности о произошедшем
И что ты будешь делать?

Ну во-первых, высокоуровневое API, может сделать что-то исходя из того, что работает с OperationResult, может попробовать ещё раз, или использовать другое подключение или что-то ещё.

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

Для чего потребителю знать Success или не Success?

Просто я пока не понимаю, в чём профит работать с OperationResult повсеместно, а не на стыке (низкоуровневый API клиент). А также, ты предлагаешь жить теперь с двумя механизмами обработки ошибок: с исключениями и OperationResult, или уже вовсе от исключений отказываться совсем и перехватывать их везде и всегда, чтобы затолкать в свой OperationResult, привет двухтысячные, как по мне.

skyANAТо есть надо перехватить своё же исключение и, грубо говоря, завернуть предварительно залогировав.

Да, но отлавливать ты его можешь через множество вызовов с раскруткой стека, допустим, на уровне модуля, или приложения. И фильтровать исключения, какие ты можешь обработать по месту, а какие нет.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671389
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAКидать своё исключение, куда завернёшь operationResult.Exception?

Ну Inner-же..
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671393
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Только сейчас произошла катастрофа.
Пришел веб.
А там правила другие. Большинство исключений не стало нужно выводить юзверю.
Ну, зацепило и десктоп. И операционки.Правила отображения ошибки зависят не от Web или неWeb , а от аудитории, использующей программу: корпоративное ПО, ПО для народных масс и т. п.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671396
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КPetro123Только сейчас произошла катастрофа.
Пришел веб.
А там правила другие. Большинство исключений не стало нужно выводить юзверю.
Ну, зацепило и десктоп. И операционки.Правила отображения ошибки зависят не от Web или неWeb , а от аудитории, использующей программу: корпоративное ПО, ПО для народных масс и т. п.
Конечно.
Я указал ему только один аспект. Их много.
Кстати именно веб расширил указанный тобой критерий.
Раньше ПО писалось корпоративное. И ошибки райзе слались наверх к самому exe'шнику.
В веб низзззяяяя).
Поэтому про логирование я с вами согласен.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671411
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAКидать своё исключение, куда завернёшь operationResult.Exception ?Да хоть в самодельное свойство, хоть в InnerException...
Да понятно, но зачем?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671412
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAКидать своё исключение, куда завернёшь operationResult.Exception?

Ну Inner-же..
Да понятно, но зачем?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671414
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAТо есть надо перехватить своё же исключение и, грубо говоря, завернуть предварительно залогировав.Зачем? Логирование, стандартно, организовать где-нибудь на уровне системной библиотеки, используемой для коммуникации (WebAPI, WCF и т. п.).
Вот я и говорю: Зачем?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671416
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAДа понятно, но зачем?

В смысле, зачем? Давай вот такой пример. Распределённый кеш.

https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.caching.distributed.idistributedcache?view=aspnetcore-2.1

Ты считаешь, что интерфейс спроектирован не лучшим образом, и методы типа Get(String) должны возвращать OperationResult, ведь очевидно, что реализация будет скорее всего использовать сетевые API, откуда будут приходить структуры, содержащие значение, статус выполнения и прочее?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671419
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAВот отвалился микросервис, то есть к примеру operationResult.Success - false, operationResult.StatusCode - TransportFailed, operationResult.Exception - все подробности о произошедшем
И что ты будешь делать?

Ну во-первых, высокоуровневое API, может сделать что-то исходя из того, что работает с OperationResult, может попробовать ещё раз, или использовать другое подключение или что-то ещё.Хм, пишешь декораторы Circuit Breaker и Retry, при конфигурации IoC контейнера указываешь, что использовать.

hVosttПотребитель высокоуровневого API ожидает, что операция будет выполнена точно также как любой вызов любого интерфейса в проекте. А если вызов не удался, по любым причинам, то сломаться должна вся цепочка, вплоть до прикладного кода, и где-то должно перехватиться исключение, чтобы вернуть систему в изначальное состояние, удалить какие-нибудь временные файлы, откатить транзакции и т.д. и т.п.Зависит от.
Отвалился Couchbase, ну и фиг бы с ним, там кэш. Лезем напрямую в БД.
Чуть медленнее получим данные, но зато пользователи продолжают работать.

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

hVosttПросто я пока не понимаю, в чём профит работать с OperationResult повсеместно, а не на стыке (низкоуровневый API клиент). А также, ты предлагаешь жить теперь с двумя механизмами обработки ошибок: с исключениями и OperationResult, или уже вовсе от исключений отказываться совсем и перехватывать их везде и всегда, чтобы затолкать в свой OperationResult, привет двухтысячные, как по мне.Не не, я пока не предлагаю это делать повсеместно

hVosttskyANAТо есть надо перехватить своё же исключение и, грубо говоря, завернуть предварительно залогировав.

Да, но отлавливать ты его можешь через множество вызовов с раскруткой стека, допустим, на уровне модуля, или приложения. И фильтровать исключения, какие ты можешь обработать по месту, а какие нет.Опять же рассмотрим случай с кэшем.
Ну зачем мне там кидать свои исключения, чтобы потом их ловить?
С кэшем проблемы (operationResult не Success) - идём в БД.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671424
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAДа понятно, но зачем?

В смысле, зачем? Давай вот такой пример. Распределённый кеш.

https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.caching.distributed.idistributedcache?view=aspnetcore-2.1

Ты считаешь, что интерфейс спроектирован не лучшим образом, и методы типа Get(String) должны возвращать OperationResult, ведь очевидно, что реализация будет скорее всего использовать сетевые API, откуда будут приходить структуры, содержащие значение, статус выполнения и прочее?
Не, с этим всё в порядке, а вот DistributedCache.Client пусть возвращает OperationResult
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671429
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAХм, пишешь декораторы Circuit Breaker и Retry, при конфигурации IoC контейнера указываешь, что использовать.

Ну понятно, что "высокоуровневый клиент API", это декоратор. Таки в декораторах ты предлагаешь уже бросать исключения?

skyANAЧуть медленнее получим данные, но зато пользователи продолжают работать.

Верно, но это уже при декорировании.


skyANAТупо для того, чтобы понять по какой ветке идти.
В случае с кэшем для того, чтобы понять получил ты нужные данные, или надо в БД лезть.

Это при декорировании? Или потребителю службы отдать все потроха результата выполнения? :)


skyANAНе не, я пока не предлагаю это делать повсеместно

..пока??

Таки что ты имел в виду, говоря про функциональный подход в этом случае?

skyANAОпять же рассмотрим случай с кэшем.
Ну зачем мне там кидать свои исключения, чтобы потом их ловить?
С кэшем проблемы (operationResult не Success) - идём в БД.

Если ты реализуешь GetOrAdd, то потребителю не нужно будет знать вообще про то, что кеш отваливается, это зачем ему? Тем более, кеш может использовать интенсивно, а проверки результата сильно увеличивают связанность.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671430
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAНе, с этим всё в порядке, а вот DistributedCache.Client пусть возвращает OperationResult

Ну дык, об этом и речь. А как иначе?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671433
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAНе, с этим всё в порядке, а вот DistributedCache.Client пусть возвращает OperationResult

Ну дык, об этом и речь. А как иначе?
О, консенсус! За это надо выпить
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671437
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttТем более, кеш может использовать интенсивно, а проверки результата сильно увеличивают связанность.
Вот этого не понял...

Связность характеризует то, насколько хорошо все методы класса или все фрагменты метода соответствуют главной цели, - иначе говоря, насколько сфокусирован класс © Макконнелл, 2010.

О чём ты?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671438
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAСвязность характеризует то, насколько хорошо все методы класса или все фрагменты метода соответствуют главной цели, - иначе говоря, насколько сфокусирован класс © Макконнелл, 2010.

Связ А нность.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671440
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

tight coupling
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671442
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAСвязность характеризует то, насколько хорошо все методы класса или все фрагменты метода соответствуют главной цели, - иначе говоря, насколько сфокусирован класс © Макконнелл, 2010.

Связ А нность.


Ой, бл*, в глаза балуюсь Ты про coupling.

Всё равно не понял. Тебе так, или иначе надо проверять результат, что вернулся из кэша.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671476
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAВсё равно не понял. Тебе так, или иначе надо проверять результат, что вернулся из кэша.

Для потребителя значение либо есть в кеше, либо нет. Остальное, либо ошибка, либо какая-то скрытая обработка.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671739
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAВсё равно не понял. Тебе так, или иначе надо проверять результат, что вернулся из кэша.

Для потребителя значение либо есть в кеше, либо нет. Остальное, либо ошибка, либо какая-то скрытая обработка.
Именно.
Есть в кеше - используем.
Нет, ошибка, проблемы с нодой - потребитель на фиг не важно, он идёт за данными в базу.

То есть если DistributedCache.Client возвращает operationResult.Success, то берём operationResult.Value и используем.
Не Success - идём в базу. При этом не надо тут генерировать никаких исключений и героически их обрабатывать.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671897
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAТо есть если DistributedCache.Client возвращает operationResult.Success, то берём operationResult.Value и используем.
Не Success - идём в базу. При этом не надо тут генерировать никаких исключений и героически их обрабатывать.

В 1000 мест мне нужно работать с кешем и в 1000 мест я вынужден проверить Success. Но с кешем понятно, это не критичный участок, а если это распределённое файловое хранилище, например. Мне нужно получить или сохранить файл, очень много где, зачем мне этот OperationResult, мне удобно работать с файлами, как с System.IO, ошибки путь сваливают весь код, ибо он не имеет смысла без файлов, и ничего нельзя сделать.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671918
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAТо есть если DistributedCache.Client возвращает operationResult.Success, то берём operationResult.Value и используем.
Не Success - идём в базу. При этом не надо тут генерировать никаких исключений и героически их обрабатывать.

В 1000 мест мне нужно работать с кешем и в 1000 мест я вынужден проверить Success. Но с кешем понятно, это не критичный участок, а если это распределённое файловое хранилище, например. Мне нужно получить или сохранить файл, очень много где, зачем мне этот OperationResult, мне удобно работать с файлами, как с System.IO, ошибки путь сваливают весь код, ибо он не имеет смысла без файлов, и ничего нельзя сделать.И откуда ты взял эти 1000 мест?
Пишется декоратор и ты работаешь с repository, или query как обычно, просто при конфигурации IoC контроллера указываешь, что заверните-ка мне это в CacheDecorator.

Работа с файлами тоже разная бывает.
К примеру пользователь заливает js под видом картинки.
Можно кинуть ему исключение "Нельзя, козлина!", героически его поймать и вывести "Ай, ай, ай".
А можно operationResult.StatusCode = StatusCode.NotAllowed.

Но сваливать весь код уж точно не стоит
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671978
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAИ откуда ты взял эти 1000 мест?
Пишется декоратор и ты работаешь с repository, или query как обычно, просто при конфигурации IoC контроллера указываешь, что заверните-ка мне это в CacheDecorator.

Ну мы уже выяснили, что таки делаем декоратор, и при ошибках бросаем исключения, если это требуется. Если компонент не влияет критически на работу приложения, то ошибки игнорируются, например, для кеша Get отдаёт всегда null, а GetOrAdd возвращает значение из переданной фабрики.

skyANAРабота с файлами тоже разная бывает.
К примеру пользователь заливает js под видом картинки.
Можно кинуть ему исключение "Нельзя, козлина!", героически его поймать и вывести "Ай, ай, ай".
А можно operationResult.StatusCode = StatusCode.NotAllowed.

А вот здесь ты как раз путаешь валидацию с ошибками. Попытка внести данные, нарушающие целостность СУБД, это ошибка. При чём ошибка программиста, который не удосужился проверить данные перед тем, как их сохранять, не обеспечил условия. Здесь так же. Если же даже после валидации ошибка возникла, то это исключительная ситуация, которую не нужно пытаться свести к валидации и показывать пользователю.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39671979
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAНо сваливать весь код уж точно не стоит

Стоит, так как программист не выполнил нужные действия, значит это надо чинить.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672006
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

короче бессмысленный какой-то спор Всё зависит от ситуации, архитектуры приложения и требований.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672010
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAhVostt,

короче бессмысленный какой-то спор Всё зависит от ситуации, архитектуры приложения и требований.

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

Если ты проектируешь интерфейсы и классы не для внешнего API, то у тебя есть механизм исключений, которым нужно пользоваться, а не городить ещё один механизм.

Как бы понятно, it depends, но ключевые тезисы никто не отменял :)
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672078
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttПри выставлении API наружу, механизм исключений не будет работать, поэтому ты упаковываешь результат в OperationResult.

Если ты проектируешь интерфейсы и классы не для внешнего API, то у тебя есть механизм исключений, которым нужно пользоваться, а не городить ещё один механизм.
+1
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672103
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttЕсли ты проектируешь интерфейсы и классы не для внешнего API, то у тебя есть механизм исключений, которым нужно пользоваться, а не городить ещё один механизм.
Ну убедил it depends
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672285
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAНу убедил it depends

Как раз недавно рефакторили модуль, отвечающий за исполнение DSL. Все вызовы были построены на OperationResult (да-да, мне тоже раньше это казалось офигенно крутой идеей). Переделали на исключения, речь идёт именно про ошибки. Кода стало меньше, чище, понятней и решили пару проблем.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672302
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttКак раз недавно рефакторили модуль, отвечающий за исполнение DSL. Все вызовы были построены на OperationResult (да-да, мне тоже раньше это казалось офигенно крутой идеей). Переделали на исключения, речь идёт именно про ошибки. Кода стало меньше, чище, понятней и решили пару проблем.
Знакомо, так часто происходит при рефакторинге, решать "пару проблем". Не сомневаюсь, OperationResult тут ни при чем))
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672304
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LR,

:)
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672305
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хуже, когда оказывается, что "решение" породило 4 проблемы :)
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672311
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>hVostt, вчера, 22:48 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21560717][21560717]
>Как раз недавно рефакторили модуль…
А почему любой модуль всегда должен что-то (код, исключение) возвращать вызывающему при ошибке? Пусть информация об ошибке иногда останется там, внутри модуля, в объекте некоего класса. По завершению вызываюший, запросив свойство, получит ссылку на объект ошибки. Если null, штатно.
т.е.
. . .
try{модуль.метод();}
catch{...}
. . .
или
. . .
модуль.метод();
if(модуль.ошибка() != null) goto ?;
. . .
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672312
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRЗнакомо, так часто происходит при рефакторинге, решать "пару проблем". Не сомневаюсь, OperationResult тут ни при чем))

Именно его и убирали, поэтому и привёл как пример из собственной практики.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672314
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttИменно его и убирали, поэтому и привёл как пример из собственной практики.
Понятно, смена поколений, пора мне в "наш уютный колумбарий"))
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672315
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевА почему любой модуль всегда должен что-то (код, исключение) возвращать вызывающему при ошибке?

Брошенное исключение гарантирует, что если потребитель специально его не отловит и как-то не обработает, то дальше код исполняться не будет.

Например, читаете вы файл:

var file = Some.IO.File.Read(someFilePath);

А файла нет, или прав доступа к файлу нет, или во время чтения что-то сломалось.

Что должно быть в file? Ничего не должно быть. Должно быть выброшено исключение.

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

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


ВМоисеевtry{модуль.метод();}
catch{...}
. . .
или
. . .
модуль.метод();
if(модуль.ошибка() != null) goto ?

Состояние это всегда плохо. Состояние с ошибкой последней операции -- плохо миллион-кратно. Настолько плохо, что даже не знаю, ну это как объяснять, что пить мочу -- плохо.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672316
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRhVosttИменно его и убирали, поэтому и привёл как пример из собственной практики.
Понятно, смена поколений, пора мне в "наш уютный колумбарий"))

Поколение тут совершенно не при чём. Это не что-то модное и хипстерское. Скорее наоборот.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672321
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttПоколение тут совершенно не при чём. Это не что-то модное и хипстерское. Скорее наоборот.
Не, наоборот - это ситуация, когда ничего еще не закодировано, а на кончиках пальцев разработчика уже есть оптимальное решение, то ли "Исключения vs коды возвратов" то ли наоборот (если что - я сейчас пьян) :))
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672325
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRНе, наоборот - это ситуация, когда ничего еще не закодировано, а на кончиках пальцев разработчика уже есть оптимальное решение, то ли "Исключения vs коды возвратов" то ли наоборот (если что - я сейчас пьян) :))

У разработчика всё уже готово, осталось только код написать, а это фигня-вопрос ))
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672336
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttПри выставлении API наружу, механизм исключений не будет работать , поэтому ты упаковываешь результат в OperationResult.Зависит от протокола передачи данных. При использовании SOAP очень даже будет.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672346
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЗависит от протокола передачи данных. При использовании SOAP очень даже будет.да, конечно. Наверняка он говорил про рукописный протокол. Где исключения не передать.
Как бы если протокол что то позволяет, то глупо не пользоваться)).
...
Ну и в итоге только пара мемберов против исключений и за некий загадочный код возврата.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672350
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,
Код: c#
1.
DWORD WINAPI GetLastError(void);


Может всё таки что посовременнее?
Лямбды? Замыкания?)))
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672362
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КhVosttПри выставлении API наружу, механизм исключений не будет работать , поэтому ты упаковываешь результат в OperationResult.Зависит от протокола передачи данных. При использовании SOAP очень даже будет.

Ну если так да :)
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672376
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей Кпропущено...
Зависит от протокола передачи данных. При использовании SOAP очень даже будет.

Ну если так да :)
Ну, здесь и то, и другое: SOAP выбрасывает исключения, полученные в некоем подобии OperationResult ( <soap:fault> ). Ничто не мешает делать подобное со своим наколеночным OperationResult.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672395
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,
Да. Но как шутят: "если бы у бабушки были яйца, она....." )).
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672436
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>hVostt, сегодня, 01:22 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21561067][21561067]
>Состояние это всегда плохо. Состояние с ошибкой последней операции -- плохо миллион-кратно. Настолько плохо, что даже не знаю, ну это как объяснять, что пить мочу -- плохо.

Неуловимо напоминает "Бежин луг" И. С. Тургенева:
"...Солнце - не огнистое, не раскаленное, как во время знойной засухи, не тускло-багровое, как перед бурей…"

Не могу с Вами согласиться.
В своё время принимал участие в написании ПО управления робототехническим комплексом 1-го поколения. Там основа-основ, база алгоритма и программы - состояние (роботов по шагам - текущее, заданное, не штатное) и управление.
Новое управление на переход к следующему шагу не будет выдано, если нет требуемого состояния. Общая программа управления не получает состояние роботов ни в форме кодов возврата, ни в форме исключений, она сама запрашивает их статусы. И всё работало.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672462
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевИ всё работало.
К сожалению, это не показатель.
В космосе мы тоже....первые....были.
А Илон Маск посадил ракету.
Т.е. работать менять подходы нужно каждый день.
...
Кроме того, в нижнем уровне АПИ применяй ходь коды, хоть знаки из трех пальцев.
На прикладном уровне райзе очень даже кстати.
Ну, или декларативное управление транзакциями - новый хайп java.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672481
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныНу, здесь и то, и другое: SOAP выбрасывает исключения, полученные в некоем подобии OperationResult ( <soap:fault> ). Ничто не мешает делать подобное со своим наколеночным OperationResult.
И народ делает подобное :)
Сам использую примитивный "наколеночный" (в исследовательском/пробном коде, но иногда и в продакшн попадает)
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
    [DataContract]
    public class ProcRes
    {
        [DataMember]
        public string Msg { get; set; }
        [DataMember]
        public Exception Err { get; set; }
    }
    [DataContract]
    public class ProcRes<T> : ProcRes
    {
        [DataMember]
        public T Val { get; set; }
    }
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672499
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LR,

LR
Код: c#
1.
2.
   [DataMember]
        public Exception Err { get; set; }


Не уверен что это гут слать по сети
Есть же:
Код: c#
1.
throw new FaultException<InvalidEmailFault>(new InvalidEmailFault());


Правда длинновато))
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672508
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевНе могу с Вами согласиться.
В своё время принимал участие в написании ПО управления робототехническим комплексом 1-го поколения. Там основа-основ, база алгоритма и программы - состояние (роботов по шагам - текущее, заданное, не штатное) и управление.
Новое управление на переход к следующему шагу не будет выдано, если нет требуемого состояния. Общая программа управления не получает состояние роботов ни в форме кодов возврата, ни в форме исключений, она сама запрашивает их статусы. И всё работало.

В детстве, помню, одному из друзей разодрало зад об гвоздь на стройке.
Чтобы не получить люлей, зашивали сами подручными средствами, ржавой иголкой, дизенфицировали зажигалкой. Люлей избежать не удалось, однако пациент жив, врачи даже не стали снимать швы.

И пьяным за рулём тоже можна, некоторые говорят, у них так даже лучше получается.

И сарай из соплей сколотить тоже можно, и даже жить там.

В общем, вот такая лирика. Не имеешь желания качественно расти в профессиональном плане, да бога ради, делай как придётся. Всем наплевать. Просто и работа будет соответствующего уровня с соответствующей зарплатой. Конечно в таком случае виноват будет какой-нибудь Путин-Шмутин, ведь "у меня всё работало".
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672511
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,

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

А то как-то дошло до спора с одним из заказчиков, у которого когда-то был опыт программирования контроллера для приёма денег в будке типа киви, только по-проще. И он теперь весь свой опыт и все свои костыли оттуда экстраполирует на любую разработку вообще.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672535
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Petro123, сегодня, 11:58 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21561775]21561775]
>К сожалению, это не показатель.
Да нет, первое требование заказчика - р а б о т а.

>...На прикладном уровне райзе очень даже кстати…
Ну зачем вариант (райз, код, внутреннее состояние) возводить в абсолют. Удобно, эффективно - используй, неудобно - ищи что-то другое.
Хочу заметить, что статус робота "Питатель" нужен, в определенные моменты, и роботу "Конвейер" и работу "Заряд".
И зачем в этом случае, по завершению рабочего цикла, "Питатель" должен кому-то, чего-то и как-то сообщать?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672552
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевДа нет, первое требование заказчика - р а б о т а.

Ну так а фига ли люди предпочитают инормарки отечественному автопрому?
Работает же, ездит.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672555
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>hVostt, сегодня, 13:13 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21562130][21562130]
>...Просто и работа будет соответствующего уровня с соответствующей зарплатой…
Ну да, и 3-х байтовую арифметику с плавающей точкой писал; и операционную систему реального времени, и драйверы для неё, и ПО системы управления тех. процессами химического производства, и ПО робототехнического комплекса, и опердень банка, и прототип защищеной инфосистемы, и ГИС тоже писал (или принимал участие), но зарплату рисовали, такие как Вы. Такова жизнь.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672562
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>hVostt, сегодня, 13:43 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21562338][21562338]
>Работает же, ездит.
Хочу увидеть человека, покупающего машины, которые не ездят. Я не из таких.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672576
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>hVostt, сегодня, 13:43 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21562338][21562338]
>Работает же, ездит.
Хочу увидеть человека, покупающего машины, которые не ездят. Я не из таких.

Я хз что вы пытаетесь мне доказать. Типа, если делать через ж, но это как-то работает, то и нормально?
Ещё раз, лично я не против. Делайте как хотите, точнее как умеете. Если не желаете профессионально расти, то и говорить нам не о чем, кто я такой, чтобы вас критиковать. Одно скажу точно, с таким подходом в нашей компании, даже самая низшая ступень стажёра будет недоступна в принципе.

Нам не надо, чтобы как-то работало, надо чтобы проекты работали хорошо, быстро, качественно, легко сопровождались и могли развиваться без лишних сложностей, а также иметь способности к довольно таки серьёзным изменениям и развитию в командной разработке. При этом решали как текущие задачи, так и готовы были готовы решать будущие задачи.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672581
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевНу да, и 3-х байтовую арифметику с плавающей точкой писал; и операционную систему реального времени, и драйверы для неё, и ПО системы управления тех. процессами химического производства, и ПО робототехнического комплекса, и опердень банка, и прототип защищеной инфосистемы, и ГИС тоже писал (или принимал участие), но зарплату рисовали, такие как Вы. Такова жизнь.

Вы не понимаете главного. Это не жизнь такова, вы сами решаете как вам надо: чтобы жилось, или чтобы хорошо жилось. И для себя, и для других. Когда вам говорят почему ваш код плохой, вы противопоставляете "работает же". Это даже не смешно, зачем тогда тратить чужое время?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672583
казинак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttНам не надо, чтобы как-то работало, надо чтобы проекты работали хорошо, быстро, качественно, легко сопровождались и могли развиваться без лишних сложностей, а также иметь способности к довольно таки серьёзным изменениям и развитию в командной разработке. При этом решали как текущие задачи, так и готовы были готовы решать будущие задачи.
чотко тебе мозги промыли
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672585
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
казинакhVosttНам не надо, чтобы как-то работало, надо чтобы проекты работали хорошо, быстро, качественно, легко сопровождались и могли развиваться без лишних сложностей, а также иметь способности к довольно таки серьёзным изменениям и развитию в командной разработке. При этом решали как текущие задачи, так и готовы были готовы решать будущие задачи.
чотко тебе мозги промыли

А чё не так?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672590
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttА чё не так?
Из твоих уст идёт "агрессивная правда"))))).
Клиент давно в ауте).
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672609
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123hVosttА чё не так?
Из твоих уст идёт "агрессивная правда"))))).
Клиент давно в ауте).

Да это потому что это далеко не первый раз. Уже 50 раз обсуждалось и всё сводится к тому, что "мне пофигу, мне не надо, у меня работает". Ну так если всё устраивает, зачем людям мозги колупать.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672632
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

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

Всем пофигу только до того момента, пока они плавают в собственной жиже. Но когда тебе дают пару десятков чужих проектов, которые тебе надо либо поддерживать, либо делать новую итерацию, понимаешь всю боль от таких вот принципов "Работает и ладно". Когда даже в отладчике не понятно, чего хотел получить автор, на каком этапе вернулось не то, что ожидалось и поиск проблемы начинает затягиваться.

Особенно, если в качестве результате некорректного выполнения клиент тебе просто кидают дамп процесса с примерный описание проблемы.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672662
казинак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejteshVostt,

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

Всем пофигу только до того момента, пока они плавают в собственной жиже. Но когда тебе дают пару десятков чужих проектов, которые тебе надо либо поддерживать, либо делать новую итерацию, понимаешь всю боль от таких вот принципов "Работает и ладно". Когда даже в отладчике не понятно, чего хотел получить автор, на каком этапе вернулось не то, что ожидалось и поиск проблемы начинает затягиваться.

Особенно, если в качестве результате некорректного выполнения клиент тебе просто кидают дамп процесса с примерный описание проблемы.
сто разу уж обсуждалось, но повторюсь:
1)твой код, для других - такой же говнокод, чо б ты о себе не думал
2)умение разбираться в чужом коде - это скилл, который кстати в вакансиях указывают.
Не умеешь? ну дык грош тебе цена
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672663
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>hVostt
> Я хз что вы пытаетесь мне доказать.
Вы, как тот тетерев, не слышите или не хотите слушать других, когда токуете. Ваша песня - выдвинули гипотезу, что тот, кто выполняет заказ, обязательно должен при не штатной ситуации возвращать исключение, состояние,- это плохо. Я на двух примерах попытался показать, что это не всегда возможно да и не нужно. Состояние выполняющего заказ, важно нескольким заказчикам и каждый из них может проверить статус и состояние выполнения заказа. И причем здесь код или исключение? Повторяю, зачем возводить какую-то схему в Абсолют, все схемы желательно знать и уметь ими пользоваться.

>...Нам не надо, чтобы как-то работало…
Я утверждаю, в ответ на реплику Petro 123, что работоспособность ПО, это архиважнейшее необходимое условие его принятия в эксплуатацию - так было, есть и будет; но нигде не утверждал что это условие достаточно.

> ...Вы не понимаете главного... Когда вам говорят почему ваш код плохой…
Обычно предъявляю фрагмент кода, реализующего основную идею реализации задачи. И если мне говорят, что мой код плохой, обычно прошу оппонента представить его вариант кода.
На мою версию кода ( здесь и здесь ), реализующего задачу получения выборки из базы данных хранимой процедурой, оппонент ответил так и так .

Как Вы понимаете, я не в восторге.
Зачем множить сущности без необходимости (бритва Оккама).
1. Зачем private IDbCommand CreateCommand(EntityQueryContext context), какой смысл в этом?
2. Зачем так определять класс: public class EntityQuery : IQuery<EntityQueryContext, Entity>. Как я понимаю, на каждую ХР, свой класс. У меня всего один.
3. Зачем var lst_Entity = query.Ask(queryContext); Как с этим работать в других вызываемых методах?
4. Вторя Оккаме - не выноси сущность во вне без необходимости - я определяю класс сущности внутри панели - класса UserControl.
Все панели работы со справочниками достаточно похожи друг на друга и реализуют типовые операции - Новая, Клон, Редактировать, Удалить, Сохранить. Поэтому и имеют похожий программный код. В частности, сущность, ассоциированная с выборкой, имеет одинаковое имя во всех панелях. Проще Copy-Paste.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672677
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевЯ утверждаю, в ответ на реплику Petro 123, что работоспособность ПО, это архиважнейшее необходимое условие его принятия в эксплуатацию
Скажи, ты под началом архитектора, руководителя проекта или тимлида работал?
У них другие критерии....архиважнейшие))))) LOL.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672678
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевбритва Оккамазачем бритва? Достаточно переменных названных не по стандартам компании. По русски: ЦЫ, КУ, ЖО.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672694
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Petro123, сегодня, 17:04 [21563389]
>...У них другие критерии....архиважнейшие))))) LOL...
Очень интересно. Приходилось принимать участие в сдаче системы - и тем и тем.
Батенька, открываем обязательный документ "Программа и методика испытаний" и видим:
1. Объект испытаний
2. Цель и задачи испытаний
3. Требование к программному приложению
Функционирование бла...бла..бла… должно обеспечивать: ….
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672702
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевПриходилось принимать участие в сдаче системыну и мне приходилось.
Ведь это один этап производства ПО.
Их же несколько. Смотри пошире.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672771
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Алексей КЗависит от протокола передачи данных. При использовании SOAP очень даже будет.да, конечно. Наверняка он говорил про рукописный протокол. Где исключения не передать.
Как бы если протокол что то позволяет, то глупо не пользоваться)).
...
Ну и в итоге только пара мемберов против исключений и за некий загадочный код возврата.А кто против исключений?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672773
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
казинакRoman MejteshVostt,

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

Всем пофигу только до того момента, пока они плавают в собственной жиже. Но когда тебе дают пару десятков чужих проектов, которые тебе надо либо поддерживать, либо делать новую итерацию, понимаешь всю боль от таких вот принципов "Работает и ладно". Когда даже в отладчике не понятно, чего хотел получить автор, на каком этапе вернулось не то, что ожидалось и поиск проблемы начинает затягиваться.

Особенно, если в качестве результате некорректного выполнения клиент тебе просто кидают дамп процесса с примерный описание проблемы.
сто разу уж обсуждалось, но повторюсь:
1)твой код, для других - такой же говнокод, чо б ты о себе не думал
2)умение разбираться в чужом коде - это скилл, который кстати в вакансиях указывают.
Не умеешь? ну дык грош тебе ценапункт 1 не понятен о чем конкретно
В интернет полно примеров чужого кода, и при этом не говнокода
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672815
казинак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAказинакпропущено...

сто разу уж обсуждалось, но повторюсь:
1)твой код, для других - такой же говнокод, чо б ты о себе не думал
2)умение разбираться в чужом коде - это скилл, который кстати в вакансиях указывают.
Не умеешь? ну дык грош тебе ценапункт 1 не понятен о чем конкретно
В интернет полно примеров чужого кода, и при этом не говнокода
Любой код можно обозвать говнокодом, и ваш, и код в сети, тоже.
Т.к. каждая задача имеет несколько решений, и сторонники одного решения всегда будут обсирать сторонников других.

Так понятней?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672852
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes,

+1

казинаксто разу уж обсуждалось, но повторюсь:

Где это сто раз обсуждалось? У вас на кухне?

казинак1)твой код, для других - такой же говнокод, чо б ты о себе не думал

Это из заповедей закоренелого говнокодера? Чтобы ничего не делать, ничего не учить, ни к чему не стремиться, ни следовать практикам, принципам, и подходам качественной разработки?

Херню не говорте.

казинак2)умение разбираться в чужом коде - это скилл, который кстати в вакансиях указывают.
Не умеешь? ну дык грош тебе цена

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

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

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

Не вводите людей в заблуждение.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672854
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевЯ на двух примерах попытался показать, что это не всегда возможно да и не нужно. Состояние выполняющего заказ, важно нескольким заказчикам и каждый из них может проверить статус и состояние выполнения заказа. И причем здесь код или исключение? Повторяю, зачем возводить какую-то схему в Абсолют, все схемы желательно знать и уметь ими пользоваться.

Не увидел ничего невозможного. Ваши примеры не просто не показательны, они показывают как делать не нужно.


ВМоисеевОбычно предъявляю фрагмент кода, реализующего основную идею реализации задачи. И если мне говорят, что мой код плохой, обычно прошу оппонента представить его вариант кода.
На мою версию кода ( здесь и здесь ), реализующего задачу получения выборки из базы данных хранимой процедурой, оппонент ответил так и так .

Вам skyANA начал показывать. Но вы что сделали? Правильно, вы по сути послали его с примерами.
Поэтому нет причин никаких вообще тратить на вас время.

ВМоисеевЗачем множить сущности без необходимости (бритва Оккама).

Вы и этот принцип не понимаете, как выяснилось.


ВМоисеевПроще Copy-Paste.

Да это уже понятно. Давайте не будем, ок? Оставайтесь при своём, никто вас не принуждает писать качественный код.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672867
казинак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttказинаксто разу уж обсуждалось, но повторюсь:

Где это сто раз обсуждалось? У вас на кухне?
на этом форуме

hVostt...Чтобы ничего не делать, ничего не учить, ни к чему не стремиться, ни следовать практикам, принципам, и подходам качественной разработки?
ну какой смысл чета обсуждать с тобой, если ты как попугай повторяешь чужие мантры
своих то мыслей нет
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672869
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не бойтесь тюрьмы, не бойтесь сумы,
Не бойтесь мора и глада,
А бойтесь единственно только того,
Кто скажет: "Я знаю, как надо!"
(c) Александр Галич
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672870
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
казинакну какой смысл чета обсуждать с тобой, если ты как попугай повторяешь чужие мантры
своих то мыслей нет

Я вообще не знаю, зачем ты пытаешься в споры лезть, не имея ни одного аргумента за душой.
Думаешь вот этот детский сад из разряда "голову тебе промыли" -- аргумент? Ну-ну
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672873
казинак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttИ я могу отличить говнокод от качественного кода, без каких-либо проблем.

это только твое личное, никому не интересное, мнение

вот когда будут однозначные критерии качества кода, тогда можно будет поспорить
а так.... Петя против Васи...
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672877
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
казинакэто только твое личное, никому не интересное, мнение

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

Спорить не о чем, у тебя нет ни базы, ни основ, ни понимания.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672892
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
казинакskyANAпропущено...
пункт 1 не понятен о чем конкретно
В интернет полно примеров чужого кода, и при этом не говнокода
Любой код можно обозвать говнокодом, и ваш, и код в сети, тоже.
Т.к. каждая задача имеет несколько решений, и сторонники одного решения всегда будут обсирать сторонников других.

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

Вот hVostt топит за исключения в данном топике, я предложил OperationResult.

И мы обсуждали именно разные стороны этих подходов, не переходя на личности и уж тем более не обсирая друг друга
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672896
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
казинакhVosttИ я могу отличить говнокод от качественного кода, без каких-либо проблем.

это только твое личное, никому не интересное, мнение

вот когда будут однозначные критерии качества кода, тогда можно будет поспорить
а так.... Петя против Васи...
А Вы хотите здесь поспорить с ним на тему того, умеет-ли он отличить качественный код от говнокода?
Зачем?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672898
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAА Вы хотите здесь поспорить с ним на тему того, умеет-ли он отличить качественный код от говнокода?
Зачем?

Он просто не знает, что критерии для оценки качества кода существуют.
Отсюда и непонимание.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672910
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
казинакна этом форумене видел))).
Ты че такой агрессивный?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672917
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRНе бойтесь тюрьмы, не бойтесь сумы,
Не бойтесь мора и глада,
А бойтесь единственно только того,
Кто скажет: "Я знаю, как надо!"
(c) Александр Галичмаксимализм в любом проявлении плохо. Кто спорит.
Но и критерии "хорошести" у программистов тоже есть.
Иначе зачем топик?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672930
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttОн просто не знает, что критерии для оценки качества кода существуют.Существует единственный критерий правильности программы: программа должна соответствовать техническому заданию. Всё остальное, это субъективное мнение критиков.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672933
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кправильности программыhVosttкачества кодаты не видишь разницы между понятиями?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672936
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>Petro123, сегодня, 17:04 [21563389]
>...У них другие критерии....архиважнейшие))))) LOL...
Очень интересно. Приходилось принимать участие в сдаче системы - и тем и тем.
Батенька, открываем обязательный документ "Программа и методика испытаний" и видим:
1. Объект испытаний
2. Цель и задачи испытаний
3. Требование к программному приложению
Функционирование бла...бла..бла… должно обеспечивать: ….+1
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672941
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProАлексей Кправильности программыhVosttкачества кодаты не видишь разницы между понятиями?Я прекрасно понимаю, о чём идёт речь. Но мне захотелось формально подойти к этому вопросу, поэтому я не знаю, что такое "сферическое качество кода".

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

Всё остальное можно рассматривать как рекомендации , необязательные к исполнению, не более .
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672943
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КhVosttОн просто не знает, что критерии для оценки качества кода существуют.Существует единственный критерий правильности программы: программа должна соответствовать техническому заданию. Всё остальное, это субъективное мнение критиков.
И со временем система обрастает техническим долгом и реализация новых требований проходит всё с большим количеством мата, но программа продолжает соответсвовать техническому заданию
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672950
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КВсё остальное можно рассматривать как рекомендации , необязательные к исполнению, не более .Ну и будет рекомендация тимлида тебя уволить к чертовой матери, не более.

Хвост же говорит - хочешь писать говнокод, пиши говнокод. Сам с собой. А будучи в команде изволь выполнять требования к качеству кода, а не только к соответствию ТЗ.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672953
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,
Я тебя понимаю, ты эдакий, свободный художник). Хоть и профи.
Т.е. захотел метод размером в 1500 строк и написал.
Работает же.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672960
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНо обычно такого маразма в требованиях, конечно же, нет.требования чтобы тормозные колодки снимались легко и непринужденно в инструкции по эксплуатации есть?
Снимал на москвиче и иномарке? Сравнивал? ))
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672965
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProА будучи в команде изволь выполнять требования к качеству кода , а не только к соответствию ТЗ.Я не против, если эти требования чётко описаны и ТЗ на них ссылается. Тогда они должны исполняться и проверяться на этапе сдачи в эксплуатацию.

Но тут речь идёт о каких-то мифических "лучших традициях", которые из года в год меняются с точностью до наоборот. Не нужно это путать.

А если чётко описанных требований нет, как это часто бывает, то нужно писать в том же стиле, в каком в данном проекте решены аналогичные задачи, независимо от того, нравится тебе такой стиль написания или нет.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672970
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Существует единственный критерий правильности программы: программа должна соответствовать техническому заданию. Всё остальное, это субъективное мнение критиков.
И со временем система обрастает техническим долгом и реализация новых требований проходит всё с большим количеством мата, но программа продолжает соответсвовать техническому заданию Это уже вопрос к самим требованиям, которые должны быть заложены ещё до написания программы. Другими словами, не нужно перекладывать ответственность с архитекторов на рядовых программистов.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672974
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КhVosttОн просто не знает, что критерии для оценки качества кода существуют.Существует единственный критерий правильности программы: программа должна соответствовать техническому заданию. Всё остальное, это субъективное мнение критиков.

Это вопрос из разряда цвета фломастеров. Это не про инженерную дисциплину, уж прости.
Какие критики? При чём тут соответствие ТЗ и качества кода? Да, веришь нет, но можно такой говнокод написать, что даже у миддла волосы дыбом встанут, но формально работа программы будет соответствовать ТЗ.

Я правильно понимаю, согласно твоим идеям, некоторым водителям можно бухать за рулём, если им кажется, что они всё равно нормально водят, и довезут тебя куда надо за требуемое время?

В общем, странный и неуместный подход.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672977
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProНу и будет рекомендация тимлида тебя уволить к чертовой матери, не более.

Хвост же говорит - хочешь писать говнокод, пиши говнокод. Сам с собой. А будучи в команде изволь выполнять требования к качеству кода, а не только к соответствию ТЗ.

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

Поэтому такие взгляды и такое отношение. Как хочу, так пишу. Творчество, понимаешь. В принципе, для single разработчика, такой подход никому не мешает. Особенно, если он собирается работать там до пенсии, а после хоть трава не расти
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672978
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttЯ правильно понимаю, согласно твоим идеям, некоторым водителям можно бухать за рулём, если им кажется, что они всё равно нормально водят, и довезут тебя куда надо за требуемое время?Нет, не правильно понимаешь. Есть закон, запрещающий "бухать" за рулём.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672979
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЯ не против, если эти требования чётко описаны и ТЗ на них ссылается. Тогда они должны исполняться и проверяться на этапе сдачи в эксплуатацию.

Это вопрос именно разработки, профессионализма, культуры, профессиональной этики.

Где-то в ТЗ прописано, чтобы ты не справлял нужду за рабочим столом, нет? Но ты же так не делаешь? Хотя если ты будешь работать исключительно один, и это не будет никому мешать, почему нет?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672980
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КА если чётко описанных требований нет, как это часто бывает, то нужно писать в том же стиле, в каком в данном проекте решены аналогичные задачи, независимо от того, нравится тебе такой стиль написания или нет.
Даже если аналогичная задача решена 12 лет назад на ASP.NET WebForms таким образом, что тестами ни фига не покрыто и с трудом разберёшься где что?

А вышло так потому, что 12 лет назад надо было быстро быстро на рынок выходить, главное чтобы работало, а на качество...
А качество денег принесёт? Пока ты будешь требования к нему расписывать, проектировать, вылизывать, то рынок тю-тю, займут.

Извини, но я лучше предожу своё решение на техническое ревью, основанное на моём понимании принципов проектирования и опыте, чем буду ждать "чётко описанных требований".
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672983
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КhVosttЯ правильно понимаю, согласно твоим идеям, некоторым водителям можно бухать за рулём, если им кажется, что они всё равно нормально водят, и довезут тебя куда надо за требуемое время?Нет, не правильно понимаешь. Есть закон, запрещающий "бухать" за рулём.

Ну так во многих компаниях точно также приняты стайл гайды, и существует практика контроля за качеством кода. Но в ТЗ это не приписывается. Будешь писать говногод, будет тяжелее, дороже и дольше его развивать и сопровождать. Всё просто. При чём тут ТЗ, вообще??
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672985
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...

И со временем система обрастает техническим долгом и реализация новых требований проходит всё с большим количеством мата, но программа продолжает соответсвовать техническому заданию Это уже вопрос к самим требованиям, которые должны быть заложены ещё до написания программы. Другими словами, не нужно перекладывать ответственность с архитекторов на рядовых программистов.
А пример привести можешь того, в каком виде и куда должны быть заложены требования к качеству кода?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672986
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttГде-то в ТЗ прописано, чтобы ты не справлял нужду за рабочим столом, нет? Это тоже будет считаться административным правонарушением. Попробуешь спросить ещё раз? :-)
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672990
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAА качество денег принесёт? Пока ты будешь требования к нему расписывать, проектировать, вылизывать, то рынок тю-тю, займут.

Поэтому надо всегда учиться работать профессионально и поддерживать качество на уровне, а не ждать пока тебя мордой 10 раз будут тыкать на соответствие каким-то требованиям. Потому что, видимо, для некоторых по-другому ну никак. Прям как в армии, пока матом не наорёшь и пию..лей не выпишешь, ничего делать нормально не будут.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672992
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КhVosttГде-то в ТЗ прописано, чтобы ты не справлял нужду за рабочим столом, нет? Это тоже будет считаться административным правонарушением. Попробуешь спросить ещё раз? :-)

Продолжать можно долго, потому что ТЗ не описывает многих аспектов разработки.
Иначе ТЗ будет дороже самой разработки.
Кроме того, разработка и чёткое ТЗ, это очень редкий случай, я его в практике вообще не видел.
Разработка это всегда развитие продукта, отсюда практики CI, DevOps и т.д.
Какое ТЗ?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672994
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Это уже вопрос к самим требованиям, которые должны быть заложены ещё до написания программы. Другими словами, не нужно перекладывать ответственность с архитекторов на рядовых программистов.
А пример привести можешь того, в каком виде и куда должны быть заложены требования к качеству кода?Ты не понимаешь. Ещё раз. Требовать исполнение можно только в том случае, если требования чётко сформулированы НА БУМАГЕ. Всё остальное можно рассматривать только в качестве рекомендаций.

Например, можно требовать соблюдения правил именования Camel Case , которые чётко описаны, сослаться на эти правила в ТЗ.

Нужны ещё примеры?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672995
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttПродолжать можно долго, потому что ТЗ не описывает многих аспектов разработки.
Иначе ТЗ будет дороже самой разработки. Часто так и бывает.
hVosttКроме того, разработка и чёткое ТЗ, это очень редкий случай, я его в практике вообще не видел.Видимо в этом и есть проблема.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672996
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Ксформулированы НА БУМАГЕ.ну дак они есть. Корпоративные.
По стилю кодирования, по госТайне, по ...
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672997
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttПродолжать можно долго, потому что ТЗ не описывает многих аспектов разработки.А потом архитектор ходит и ноет по поводу того, что программисты не исполняют требования, которые он забыл озвучить перед началом проекта. Детский сад...
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672998
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Алексей Ксформулированы НА БУМАГЕ.ну дак они есть. Корпоративные.
По стилю кодирования, по госТайне, по ...Ну и замечательно. Если эти требования есть, то их надо исполнять. Я об этом и говорю.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39672999
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КВидимо в этом и есть проблема.

В чём проблема, в том, что требования с течением времени меняются, уточняются, информационные системы не являются замороженным функционалом в вакууме, а развиваются и эволюционируют?

Вот это проблема так проблема
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673000
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...

А пример привести можешь того, в каком виде и куда должны быть заложены требования к качеству кода?Ты не понимаешь. Ещё раз. Требовать исполнение можно только в том случае, если требования чётко сформулированы НА БУМАГЕ. Всё остальное можно рассматривать только в качестве рекомендаций.

Например, можно требовать соблюдения правил именования Camel Case , которые чётко описаны, сослаться на эти правила в ТЗ.

Нужны ещё примеры?

Требования к качеству кода, как правило это внутренние требования, которые исходят от тех лида/архитекта и тп.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673002
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просто примера ради, достался мне 1 проект, в проекте есть файлы по 5к строк кода!
отладка и правка багов в этих файлах превращается в сущий АД. Потому, что перемещаться по файлу, искать нужный код, который уже есть, понимать, что конкретно выполняет этот класс невозможно. Потому, что этот класс делает всё, что угодно. И когда сталкиваешься с таким кодом, приходит чёткое понимание того, почему классы должны быть SOLID и реализовывать только тот функционал, который можно описать 1 предложением.
Все эти 5 тысяч строк кода еще и на регионы разбиты, типа тут у нас методы, тут конструкторы, тут свойства и поля.
Спасает только Bookmarks, навигация по коду и т.д. И то не шибко сильно.
Код выполняет поставленные перед ним задачи. Но сопровождать такой код, полная жопа. При этом, так как у кода высокая связанность, разбить это в данный момент крайне сложно и контрпродуктивно. Я убью кучу часов просто на то, чтоб код стал читаемым и вменяемым. А часов у меня таких нет, от меня требуют решения проблем заказчика, а не решения проблем разработчиков. По этому, этот говно код останется там на веки вечные, пока не закончится жизненный цикл этого приложения.
Всё это не важно, когда пишешь код для себя, но когда пишешь код и знаешь, что его могут поддерживать другие люди, старайтесь ориентироваться на эталонный код. А не считать, что любой код, это говнокод
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673009
казинак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123казинакна этом форумене видел))).
Ты че такой агрессивный?

я белый и пушистый
это так....
потроллить местных всезнаек
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673010
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонТребования к качеству кода, как правило это внутренние требования, которые исходят от тех лида/архитекта и тп.Какая разница от кого они приходят. Я говорю о том, что они должны быть чётко сформулированы.

Ещё пример. Если есть требования, что тело метода должно входить на экран монитора, тогда точно назови максимальное число строк в теле метода, а то мониторы бывают разные. А если не можешь, то вообще не заикайся на эту тему в присутствии коллектива.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673012
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КhVosttПродолжать можно долго, потому что ТЗ не описывает многих аспектов разработки.А потом архитектор ходит и ноет по поводу того, что программисты не исполняют требования, которые он забыл озвучить перед началом проекта. Детский сад...

Я не ною :) Ведётся документация разработчика, есть корпоративные стайлгайды, наборы рекомендаций, архитектурные решения документируются в коде и описываются в вики, за качеством кода строго слежу, программисты как и все люди косячат, совершают ошибки. Одна из важных задач архитектуры -- свести к минимуму ошибки. Пишутся тесты, много тестов. Всё это позволяет сосредоточиться на задаче.

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

Не нужно размахивая руками объяснять почему это плохо, а это хорошо, апеллируя к какому-то своему прошлому опыту. Существуют критерии, принципы, практики и методики.

Те, кто на это клал, у нас не работает и не задерживается. И в других компаниях тоже, так как мы общаемся с многими другими компаниями и ведём общую деятельность.

Когда ты законсервирован один в своём коде, то взгляды конечно будут сильно отличаться. Что мы как раз и наблюдаем.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673013
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЕщё пример. Если есть требования, что тело метода должно входить на экран монитора, тогда точно назови максимальное число строк в теле метода, а то мониторы бывают разные. А если не можешь, то вообще не заикайся на эту тему в присутствии коллектива.

Нет такого требования. Есть другая метрика, которая позволяет оценить, не является ли метод сильно раздутым: код для покрытия тестами сложнее и больше, чем исходный код. Ну и принципы никто не отменял.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673014
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и конечно code review. И как не странно, что больше всего людей беспокоит, это не отнимает много времени, не в ущерб разработке, но профит колоссальный.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673015
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttНет такого требования.Ну у тебя нет, и что с того? А я такое встречал, и был очень недоволен этим требованием. Но это было давно...
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673017
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КhVosttНет такого требования.Ну у тебя нет, и что с того? А я такое встречал, и был очень недоволен этим требованием. Но это было давно...

Ну есть и такое, когда занимающий ведущие позиции разработчик имеет весьма поверхностные знания.
Тем более, экранный размер, это примерная оценка, просто для того, чтобы можно было обратить на это внимание, но никак не жесткое требование.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673018
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttКогда ты законсервирован один в своём коде, то взгляды конечно будут сильно отличаться. Что мы как раз и наблюдаем.Ты так говоришь, как будто мы с тобой вместе работали много лет. :-)

Ладно, мне пора идти. Всем удачного дня!
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673020
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttТем более, экранный размер, это примерная оценка, просто для того, чтобы можно было обратить на это внимание, но никак не жесткое требование.Вот именно об этом я и говорю, наконец-то ты меня услышал. Ладно, пока!
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673027
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЛадно, мне пора идти. Всем удачного дня!

И тебе
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673060
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesпросто примера ради, достался мне 1 проект, в проекте есть файлы по 5к строк кода!
отладка и правка багов в этих файлах превращается в сущий АД. Потому, что перемещаться по файлу, искать нужный код, который уже есть, понимать, что конкретно выполняет этот класс невозможно. Потому, что этот класс делает всё, что угодно. И когда сталкиваешься с таким кодом, приходит чёткое понимание того, почему классы должны быть SOLID и реализовывать только тот функционал, который можно описать 1 предложением.
Все эти 5 тысяч строк кода еще и на регионы разбиты, типа тут у нас методы, тут конструкторы, тут свойства и поля.
Спасает только Bookmarks, навигация по коду и т.д. И то не шибко сильно.
Код выполняет поставленные перед ним задачи. Но сопровождать такой код, полная жопа. При этом, так как у кода высокая связанность, разбить это в данный момент крайне сложно и контрпродуктивно. Я убью кучу часов просто на то, чтоб код стал читаемым и вменяемым. А часов у меня таких нет, от меня требуют решения проблем заказчика, а не решения проблем разработчиков. По этому, этот говно код останется там на веки вечные, пока не закончится жизненный цикл этого приложения.
Всё это не важно, когда пишешь код для себя, но когда пишешь код и знаешь, что его могут поддерживать другие люди, старайтесь ориентироваться на эталонный код. А не считать, что любой код, это говнокод
Значит этот код решает большую, но единственную проблему.
А не то давно бы ты смог его растащить на "классы", нет там никаких классов просто.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673077
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes5к строк кода!
отладка и правка багов в этих файлах превращается в сущий АД. Потому, что перемещаться по файлу, искать нужный код, который уже есть, понимать, что конкретно выполняет этот класс невозможно. Потому, что этот класс делает всё, что угодно. И когда сталкиваешься с таким кодом, приходит чёткое понимание того, почему классы должны быть SOLID и реализовывать только тот функционал, который можно описать 1 предложением.Ну будет у тебя 1000 мелких классов с непонятными зависимостями между ними. Думаешь, станет легче?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673083
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...

А пример привести можешь того, в каком виде и куда должны быть заложены требования к качеству кода?Ты не понимаешь. Ещё раз. Требовать исполнение можно только в том случае, если требования чётко сформулированы НА БУМАГЕ. Всё остальное можно рассматривать только в качестве рекомендаций.

Например, можно требовать соблюдения правил именования Camel Case , которые чётко описаны, сослаться на эти правила в ТЗ.

Нужны ещё примеры?Конуретно у вас в каком виде они прописываются?

Лично мы собрались, обсудили какие инструменты анализа кода будем использовать, как и какие правила там надо настроить.
Поставили, настроили. Сейчас просо проект не соберёшь, если нарушаешь правила наименования.
Для чего это в какое-то ТЗ писать?

Также договорились, что без pull request-а нельзя изменения пушить. Настроили. И все изменения проходят code review.
Для чего это в какое-то ТЗ писать?

Также договорились как проводит технический анализ, техническое и архитектурное ревью. Зафиксировали правила в Wiki.
И следуем им.
Для чего это в какое-то ТЗ писать?

Бюрократия какая-то. Мы тупо собираемся и договариваемся по каким правилам работаем, виксируем договорённости.
И смотрим на то, соблюдаются они, или нет. И если нет, то разбираемся почему.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673084
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosЗначит этот код решает большую, но единственную проблему.

Скажу, нам как-то удаётся решать большие и единственные проблемы без километров кода в одном файле, думаю в ответ услышу, дескать не такие уж и вселенские у вас решались проблемы. Ага, ага

ViPRosА не то давно бы ты смог его растащить на "классы", нет там никаких классов просто.

Нет такой задачи, растащить код на классы, просто чтоб растащить. Не надо.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673086
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesпросто примера ради, достался мне 1 проект, в проекте есть файлы по 5к строк кода!
отладка и правка багов в этих файлах превращается в сущий АД. Потому, что перемещаться по файлу, искать нужный код, который уже есть, понимать, что конкретно выполняет этот класс невозможно. Потому, что этот класс делает всё, что угодно. И когда сталкиваешься с таким кодом, приходит чёткое понимание того, почему классы должны быть SOLID и реализовывать только тот функционал, который можно описать 1 предложением.
Все эти 5 тысяч строк кода еще и на регионы разбиты, типа тут у нас методы, тут конструкторы, тут свойства и поля.
Спасает только Bookmarks, навигация по коду и т.д. И то не шибко сильно.
Код выполняет поставленные перед ним задачи. Но сопровождать такой код, полная жопа. При этом, так как у кода высокая связанность, разбить это в данный момент крайне сложно и контрпродуктивно. Я убью кучу часов просто на то, чтоб код стал читаемым и вменяемым. А часов у меня таких нет, от меня требуют решения проблем заказчика, а не решения проблем разработчиков. По этому, этот говно код останется там на веки вечные, пока не закончится жизненный цикл этого приложения.
Всё это не важно, когда пишешь код для себя, но когда пишешь код и знаешь, что его могут поддерживать другие люди, старайтесь ориентироваться на эталонный код. А не считать, что любой код, это говнокод
"реализация новых требований проходит всё с большим количеством мата, но программа продолжает соответсвовать техническому заданию" © skyANA
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673087
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНу будет у тебя 1000 мелких классов с непонятными зависимостями между ними. Думаешь, станет легче?

Легче станет не от количества классов, а когда каждый класс будет решать свои задачи, и не нарушать принципы SOLID, DRY, KISS, без действительно обоснованных на это причин.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673090
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КПарамонТребования к качеству кода, как правило это внутренние требования, которые исходят от тех лида/архитекта и тп.Какая разница от кого они приходят. Я говорю о том, что они должны быть чётко сформулированы.
Принципы SOLID для тебя достаточно чётко сформулированы?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673092
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAБюрократия какая-то. Мы тупо собираемся и договариваемся по каким правилам работаем, виксируем договорённости.
И смотрим на то, соблюдаются они, или нет. И если нет, то разбираемся почему.

И главное. Знаем зачем и для чего это делаем, а не потому что кому-то там "промыли мозги".

Без этого понимания, конечно, единственный способ для человека начать кодить хоть в какой-то части по уму, это тыкнуть его лицом в бумагу с требованиями, типа по ТЗ классы должны называться так, и код должен влазить на экран монитора босса
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673096
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КRoman Mejtes5к строк кода!
отладка и правка багов в этих файлах превращается в сущий АД. Потому, что перемещаться по файлу, искать нужный код, который уже есть, понимать, что конкретно выполняет этот класс невозможно. Потому, что этот класс делает всё, что угодно. И когда сталкиваешься с таким кодом, приходит чёткое понимание того, почему классы должны быть SOLID и реализовывать только тот функционал, который можно описать 1 предложением.Ну будет у тебя 1000 мелких классов с непонятными зависимостями между ними. Думаешь, станет легче?
5000 строк разложить по 1000 классам? То есть по 5 строк в классе.
Ты знаешь толк в проектировании
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673105
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КRoman Mejtes5к строк кода!
отладка и правка багов в этих файлах превращается в сущий АД. Потому, что перемещаться по файлу, искать нужный код, который уже есть, понимать, что конкретно выполняет этот класс невозможно. Потому, что этот класс делает всё, что угодно. И когда сталкиваешься с таким кодом, приходит чёткое понимание того, почему классы должны быть SOLID и реализовывать только тот функционал, который можно описать 1 предложением.Ну будет у тебя 1000 мелких классов с непонятными зависимостями между ними. Думаешь, станет легче?
И они все будут статик.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673110
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Какая разница от кого они приходят. Я говорю о том, что они должны быть чётко сформулированы.
Принципы SOLID для тебя достаточно чётко сформулированы?
Да пофиг.
Есть формальные подходы.
Например, если метод вызывается только из одного метода, то такого метода не должно быть.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673111
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosИ они все будут статик.

Сколько человек из активных разработчиков делали VIPROS? И сколько задействовано сейчас?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673112
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosНапример, если метод вызывается только из одного метода, то такого метода не должно быть.

Почему?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673118
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttViPRosИ они все будут статик.

Сколько человек из активных разработчиков делали VIPROS? И сколько задействовано сейчас?
ВИПРОС не могут делать "сколько человек" - для этого должно иметь ТЗ на ВИПРОС.
Сейчас на работе несколько ВИПРОСов - трехзвенные, пятизвенные,.. (наша НОВАЯ платформа!!! Еще новее - прикрутили что то туда!!!)
Я веду свой проект ВИПРОС, они свои (растаскивают как могут).
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673119
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttViPRosНапример, если метод вызывается только из одного метода, то такого метода не должно быть.

Почему?

Потому что.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673127
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosВИПРОС не могут делать "сколько человек" - для этого должно иметь ТЗ на ВИПРОС.

Странный ответ, речь-то про платформу, а не интеграцию.

ViPRosПотому что.

Видимо когда-то Алексей К получил точно такой же ответ на вопрос про размер функции в один экран, и осерчал
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673129
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosskyANAпропущено...

Принципы SOLID для тебя достаточно чётко сформулированы?
Да пофиг.
Есть формальные подходы.
Например, если метод вызывается только из одного метода, то такого метода не должно быть.
А когда появляется необходимость вызывать метод, которого нет, ещё откуда-то, то просто копипастим код?
Такой подход тоже используете?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673133
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAViPRosпропущено...

Да пофиг.
Есть формальные подходы.
Например, если метод вызывается только из одного метода, то такого метода не должно быть.
А когда появляется необходимость вызывать метод, которого нет, ещё откуда-то, то просто копипастим код?
Такой подход тоже используете?
Как только появляется нужда копипаста и копипаст не внутри одного и того же метода (там всякие екшны ,функции выручают - когда скорость не так важна), появляется новый метод.
Но, C# уже дошел до вложенных функций (есть делегаты, екшны, функции - но они медленные) и скорее всего я бы пользвался вложенными функциями в основном (но, я сижу на C# 4.0, не дают пользоваться благами).
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673143
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttViPRosВИПРОС не могут делать "сколько человек" - для этого должно иметь ТЗ на ВИПРОС.

Странный ответ, речь-то про платформу, а не интеграцию.

ViPRosПотому что.

Видимо когда-то Алексей К получил точно такой же ответ на вопрос про размер функции в один экран, и осерчал
Не имеет самостоятельной ценности такие куски.
Они сильно зависимы от контекста вызывающего метода.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673155
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosНе имеет самостоятельной ценности такие куски.
Они сильно зависимы от контекста вызывающего метода.

Ну так это совершенно другая постановка. Это из области over engineering.

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

Но если ценности нет, то конечно нафиг. Просто постановка: если у метода один вызов, метод не нужен -- это плохой критерий, может быть только как маркер, обратить внимание.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673207
Валентин Иванович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
короче, дети, вот вам совет
1. использовать исключения можно, и нужно. для вас их в ваши языки ввели не глупые дяди, чтобы вы не делали goto. если это жава или додиез ит.п. - то там есть типы. ловите нужные типы, вот и все
2. весь треп про внешний API ни о чем, просто не в кассу

удачи вам, и здоровья
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673209
Валентин Иванович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttЕсли в языке есть исключения, надо их использовать.

+146%
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673232
казинак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валентин Иванович....для вас их в ваши языки ввели не глупые дяди, еще один огнепоклонник

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

то, что другим удобно/неудобно читать твой код, савсем не показатель
к примеру, лямбды после ооп, очченно режут глаз...
и чо? запретить их?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673233
Валентин Иванович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
казинаклямбды после ооп, очченно режут глаз

шо ты несешь
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673234
казинак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валентин Ивановичказинаклямбды после ооп, очченно режут глаз

шо ты несешь
а ты?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673237
казинак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валентин Иванович,

судя по профилю, ты - завсегдатай ПТ
что такое лямбды, хоть знаешь?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673249
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
казинакВалентин Иванович,

судя по профилю, ты - завсегдатай ПТ
что такое лямбды, хоть знаешь?
а вы завсегдатай раздела "Работа". Видимо не ценят ваши подходы на работах =)
(по вашей логике)
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673254
казинак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesказинакВалентин Иванович,

судя по профилю, ты - завсегдатай ПТ
что такое лямбды, хоть знаешь?
а вы завсегдатай раздела "Работа". Видимо не ценят ваши подходы на работах =)
(по вашей логике)
не ценили б, выгнали бы давно
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673257
Валентин Иванович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныhVosttпропущено...


Ну если так да :)
Ну, здесь и то, и другое: SOAP выбрасывает исключения, полученные в некоем подобии OperationResult ( <soap:fault> ). Ничто не мешает делать подобное со своим наколеночным OperationResult.

но это не имеет отношения к Exception и try catch
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673260
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
казинакк примеру, лямбды после ооп,
летели два крокодила, один зелёный, другой - на север
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673261
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валентин Ивановичкороче, дети, вот вам совет
1. использовать исключения можно, и нужно. для вас их в ваши языки ввели не глупые дяди, чтобы вы не делали goto. если это жава или додиез ит.п. - то там есть типы. ловите нужные типы, вот и все
2. весь треп про внешний API ни о чем, просто не в кассу

удачи вам, и здоровья
Спасибо, дядя, и тебе не хворать.

Исключения используем и не только исключения. Так что не волнуйся и иди спокойно себе занимайся своими делами
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673267
Валентин Иванович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAВалентин Ивановичкороче, дети, вот вам совет
1. использовать исключения можно, и нужно. для вас их в ваши языки ввели не глупые дяди, чтобы вы не делали goto. если это жава или додиез ит.п. - то там есть типы. ловите нужные типы, вот и все
2. весь треп про внешний API ни о чем, просто не в кассу

удачи вам, и здоровья
Спасибо, дядя, и тебе не хворать.

Исключения используем и не только исключения . Так что не волнуйся и иди спокойно себе занимайся своими делами

вот это и называется - языком молоть
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673270
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валентин ИвановичskyANAпропущено...

Спасибо, дядя, и тебе не хворать.

Исключения используем и не только исключения . Так что не волнуйся и иди спокойно себе занимайся своими делами

вот это и называется - языком молоть
Языком молоть - это много и быстро говорить.
А использование не только исключений - это, извините, никак с этим не связано.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673289
Валентин Иванович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAВалентин Ивановичпропущено...


вот это и называется - языком молоть
Языком молоть - это много и быстро говорить.
А использование не только исключений - это, извините, никак с этим не связано.

поделитесь, если это не секрет, как вы используете "не только" исключения. про OperationResult я уже прочитал
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673302
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валентин ИвановичskyANAпропущено...

Языком молоть - это много и быстро говорить.
А использование не только исключений - это, извините, никак с этим не связано.

поделитесь, если это не секрет, как вы используете "не только" исключения. про OperationResult я уже прочиталВернёмся к контексту топика...

Где-то мы выбрасываем исключения, где-то возвращаем некий Result, зависит от...
Где-то даже коды возврата есть, но это надо бы переписать
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673303
Валентин Иванович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAВалентин Ивановичпропущено...


поделитесь, если это не секрет, как вы используете "не только" исключения. про OperationResult я уже прочиталВернёмся к контексту топика...

Где-то мы выбрасываем исключения, где-то возвращаем некий Result, зависит от...
Где-то даже коды возврата есть, но это надо бы переписать

молодцы. евреи, наверное
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673306
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валентин ИвановичskyANAпропущено...
Вернёмся к контексту топика...

Где-то мы выбрасываем исключения, где-то возвращаем некий Result, зависит от...
Где-то даже коды возврата есть, но это надо бы переписать

молодцыЗнаем
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673307
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Функциональный C#. Часть 4. Обработка исключений
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
[HttpPost]
public HttpResponseMessage CreateCustomer(string name, string billingInfo)
{
    Result<BillingInfo> billingInfoResult = BillingInfo.Create(billingInfo);
    Result<CustomerName> customerNameResult = CustomerName.Create(name);
 
    return Result.Combine(billingInfoResult, customerNameResult)
        .OnSuccess(() => _paymentGateway.ChargeCommission(billingInfoResult.Value))
        .OnSuccess(() => new Customer(customerNameResult.Value))
        .OnSuccess(
            customer => _repository.Save(customer)
                .OnFailure(() => _paymentGateway.RollbackLastTransaction())
        )
        .OnSuccess(() => _emailSender.SendGreetings(customerNameResult.Value))
        .OnBoth(result => Log(result))
        .OnBoth(result => CreateResponseMessage(result));
}
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673309
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673345
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA Функциональный C#. Часть 4. Обработка исключений

Угу, автор, как это обычно бывает, намеренно привёл отвратительную реализацию в противовес своему подходу:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
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.
[HttpPost]
public HttpResponseMessage CreateCustomer(string name, string billingInfo)
{
    Result<CustomerName> customerNameResult = CustomerName.Create(name);
    if (customerNameResult.Failure)
    {
        _logger.Log(customerNameResult.Error);
        return Error(customerNameResult.Error);
    }
 
    Result<BillingInfo> billingInfoResult = BillingInfo.Create(billingInfo);
    if (billingInfoResult.Failure)
    {
        _logger.Log(billingInfoResult.Error);
        return Error(billingInfoResult.Error);
    }
 
    Customer customer = new Customer(customerNameResult.Value);
 
    try
    {
        _repository.Save(customer);
    }
    catch (SqlException)
    {
        _logger.Log(“Unable to connect to database”);
        return Error(“Unable to connect to database”);
    }
 
    _paymentGateway.ChargeCommission(billingInfoResult.Value);
 
    _emailSender.SendGreetings(customerNameResult.Value);
 
    return new HttpResponseMessage(HttpStatusCode.OK);
}



А теперь перепишем, как это должно было быть:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
[HttpPost]
public HttpResponseMessage CreateCustomer(string name, string billingInfo)
{
    var customerName = CustomerName.Create(name); 
    var billingInfo = BillingInfo.Create(billingInfo);
    var customer = new Customer(customerName);
    _repository.Save(customer);
    _paymentGateway.ChargeCommission(billingInfo);
    _emailSender.SendGreetings(customerName);
    return new HttpResponseMessage(HttpStatusCode.OK);
}



Ну вот. Чисто, понятно. Хотя и здесь на контроллер возложено слишком много обязанностей, в нём выполняется многовато бизнес-логики.

Что касается кода, приведённого в конце, как решение всех проблем, то там уже очевидная проблема в коде, которого изначально и не было:

Код: c#
1.
2.
3.
4.
.OnSuccess(
            customer => _repository.Save(customer)
                .OnFailure(() => _paymentGateway.RollbackLastTransaction())
        )



И вот это, "отлов ошибок" типа в функциональном стиле, чтобы потом сделать ровно тоже самое, что может сделать фильтр API, выгоды не видно совсем. Если же внутри всё написано в таком же ключе, то весь путь ошибки, проброшенный через эти "промисы" потеряется окончательно, всё ради того, чтобы залогировать корень проблемы, но не её путь. Хотя если каждый компонент по пути следования ошибки будет оборачивать в свою структуру, то... привет недоделанные исключения! Ещё строчку и файл нужно добавлять, тогда вообще будет сказка. Поехали на нашем велосипеде, чё ты, бросай это старьё

Ладно, если такой подход позволял раньше более или менее красиво обойти проблему коллбеков при асинхронном подходе, сейчас при наличии async/await, это зачем нужно, непонятно.

В общем, статья не убедительна, но как пример, что можно ещё так накостылить, показательна :) Где-то может будет удобно применить подобный подход, но плюсов не вижу. Функциональный стиль, здесь с большим натягом.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673349
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот этот код

Код: c#
1.
2.
Result<BillingInfo> billingInfoResult = BillingInfo.Create(billingInfo);
Result<CustomerName> customerNameResult = CustomerName.Create(name);



Гарантировано не должен бросать исключения. А как этого добиться? Ловить внутри и засовывать в свою структуру. Чтобы потом что? Дождаться пока кто-то не поймает в OnFailure, если не забудет конечно.
И при этом, почему-то именно этот кусок не пошёл в функциональную цепочку, а просто засунут в замыкания, и это странновато.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673354
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такой подход, кстати, хорошо бы смотрелся в качестве прикладного интерфейса для возврата результатов в NancyFX.

Но и только. Внедрив такой подход за рамками API, неизбежно полезут костыли. Собственно что-то очень похожее, полностью основанное на OperationResult с методами-расширениями для построения цепочек я уже делал... лет 5 назад, и это действительно было удобно, потому что API был полностью на этом построен.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673355
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дядя Колякто хорошо в теме разбирается - есть какие-то мировые лидеры мнений которые топят за исключения? один програмист мне доказывает что коды лучше потому что так Джоэл сказал, очевидно надо найти не менее или примерно такого же по авторитету человека который топит за исключения.

в этой ветке я за исключения
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673356
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA Функциональный C#. Часть 4. Обработка исключений
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
[HttpPost]
public HttpResponseMessage CreateCustomer(string name, string billingInfo)
{
    Result<BillingInfo> billingInfoResult = BillingInfo.Create(billingInfo);
    Result<CustomerName> customerNameResult = CustomerName.Create(name);
 
    return Result.Combine(billingInfoResult, customerNameResult)
        .OnSuccess(() => _paymentGateway.ChargeCommission(billingInfoResult.Value))
        .OnSuccess(() => new Customer(customerNameResult.Value))
        .OnSuccess(
            customer => _repository.Save(customer)
                .OnFailure(() => _paymentGateway.RollbackLastTransaction())
        )
        .OnSuccess(() => _emailSender.SendGreetings(customerNameResult.Value))
        .OnBoth(result => Log(result))
        .OnBoth(result => CreateResponseMessage(result));
}



это ни чем не отличается от стандарного try catch, кроме записи
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673361
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachэто ни чем не отличается от стандарного try catch, кроме записи

Отличается и довольно существенно. Видим, что Result тут приходит из сервисов, т.е. там внутри такой же код. Если он где-то там сваливается, то потом прокидывается через цепочку до прикладного уровня, теряется стек вызовов, код должен полностью оперировать данными из Result, т.е. как бы функциональный стиль все дела.

Здесь мы видим, всё не совсем так.

Надо уже идти до конца, типа

return BillingInfo.Create(billingInfo).CombineWith(CustomerName.Create(name))...

ой, погодите, но по цепочке нужно оба результата. что делать... на помощь приходят туплы!

ну и попёрли костыли.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673364
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если убрать очевидно неудачный пример, то подход имеет право на жизнь. Но на прикладном уровне, иначе надо прям всё в этом стиле писать, и иметь базовый Result на всём проекте. А всё внешнее жёстко оборачивать и жестоко бороться с исключениями, как вредителями, обрачивать в Result.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673406
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttlove_bachэто ни чем не отличается от стандарного try catch, кроме записи

Отличается и довольно существенно. Видим, что Result тут приходит из сервисов, т.е. там внутри такой же код. Если он где-то там сваливается, то потом прокидывается через цепочку до прикладного уровня, теряется стек вызовов, код должен полностью оперировать данными из Result, т.е. как бы функциональный стиль все дела.

Здесь мы видим, всё не совсем так.

Надо уже идти до конца, типа

return BillingInfo.Create(billingInfo).CombineWith(CustomerName.Create(name))...

ой, погодите, но по цепочке нужно оба результата. что делать... на помощь приходят туплы!

ну и попёрли костыли.

не понял, често что ты хотел сказать. и адвокат, и прокурор одновременно. "Видим, что Result тут приходит из сервисов", ну и что, каким это боком к исключениям?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673427
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachне понял, често что ты хотел сказать. и адвокат, и прокурор одновременно. "Видим, что Result тут приходит из сервисов", ну и что, каким это боком к исключениям?

Здесь речь идёт о том, что все исключения надо подавлять везде на самой ранней стадии, т.е. по сути придётся бороться с исключениями.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673428
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttlove_bachне понял, често что ты хотел сказать. и адвокат, и прокурор одновременно. "Видим, что Result тут приходит из сервисов", ну и что, каким это боком к исключениям?

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

ты точно именно это хотел сказать?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673433
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachты точно именно это хотел сказать?

В некоторых случаях приведённый подход может быть оправдан, но знать о проблемах этого подхода нужно. Это не чёрно-белое кино.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673472
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAПоставили, настроили. Сейчас просо проект не соберёшь, если нарушаешь правила наименования.
Для чего это в какое-то ТЗ писать?Ну автоматизировали контроль исполнения требований. Молодцы! Радуюсь за вас!
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673490
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, если кто не понял, я заговорил об оценке правильности программы в ответ на беспочвенные обвинения в некомпетентности, начиная примерно отсюда .
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673515
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КВообще, если кто не понял, я заговорил об оценке правильности программы в ответ на беспочвенные обвинения в некомпетентности, начиная примерно отсюда .

Увы, беспочвенность обвинений не доказана. По-твоему, качество кода не имеет значения, если ПО работает и формально удовлетворяет требования. Но это не вопрос мнения, это вопрос финансовой стороны, ты не платишь за разработку, ты не оцениваешь затраты на дальнейшее развитие и сопровождение, bus factor, и прочее, с такой позиции разговарить не о чем. Это очень глупо, если честно.

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

В общем, печальный и насквозь унылый типичный русский подход. Посадил проводку на скруту, работает же. Прилепил на сопли, ну вроде не отваливается, держится. И т.д.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673526
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КВообще, если кто не понял, я заговорил об оценке правильности программы в ответ на беспочвенные обвинения в некомпетентности, начиная примерно отсюда .

Увы, беспочвенность обвинений не доказана. По-твоему, качество кода не имеет значения, если ПО работает и формально удовлетворяет требования. Но это не вопрос мнения, это вопрос финансовой стороны , ты не платишь за разработку, ты не оцениваешь затраты на дальнейшее развитие и сопровождение, bus factor, и прочее, с такой позиции разговарить не о чем. Это очень глупо, если честно.Повторюсь, это вопрос постановки задачи. Не надо перекладывать ответственность на рядового исполнителя. Он не обязан делать то, чего не просили.
hVosttКогда тебе, например, сделают такой ремонт при сдаче всё ок, а через неделю обои отклеились, через другую штукатурка обвалилась, тогда может дойдёт.На этот случай есть гарантийный срок эксплуатации, который оговаривается заранее.
hVosttВ общем, печальный и насквозь унылый типичный русский подход . Посадил проводку на скруту, работает же. Прилепил на сопли, ну вроде не отваливается, держится. И т.д.Удивил!
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673529
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

Другими словами, если нравится программисту хранить ошибку предыдущего вызова как поле класса, твоё какое дело, если ты явно этого не запретил при постановке задачи? Разрешено всё, что не запрещено.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673536
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КПовторюсь, это вопрос постановки задачи. Не надо перекладывать ответственность на рядового исполнителя. Он не обязан делать то, чего не просили.

Я по-моему совершенно ясно выразился, и не однократно. Хочешь говнокодить -- да ради бога. Плевал на качество кода потому что «не просили», и не желаешь профессионально расти, клал на подходы, практики, рекомендации -- да пожалуйста, это личное дело каждого.

Просто это скажется и на профессиональной деятельности и за ЗП.

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

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

Я просто об этом говорю, и никого ни к чему не принуждаю насильно.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673543
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttПросто это скажется и на профессиональной деятельности и за ЗП.

...

И во многих компаниях такое отношение к работе и труду выявят уже на этапе собеседования, или в первые дни практики. И попросят подыскать себе другое место, под стать своим детским замашкам.Интересно, а как к этому отнесётся трудовая инспекция?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673545
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttЯ по-моему совершенно ясно выразился, и не однократно. Хочешь говнокодить -- да ради бога. Плевал на качество кода потому что «не просили», и не желаешь профессионально расти, клал на подходы, практики, рекомендации -- да пожалуйста, это личное дело каждого.А тебе не кажется, что программисты под твоим руководством занимаются онанизмом избыточным проектированием? Нет, ну если деньги девать некуда, то ради Бога...
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673549
казинак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttИ во многих компаниях такое отношение к работе и труду выявят уже на этапе собеседования, или в первые дни практики. И попросят подыскать себе другое место, под стать своим детским замашкам.
работал я в такой конторе,
тоже моск выносили всякими код ревью,
особенно умиляло когда шеф бесился, если в в табе не 4 а 2 пробела

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

но вот хвост нашел себя в такой атмосфере
поздравлямс!
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673553
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
казинакпоздравлямс!

Что, завидовать молча не получается ?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673554
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КИнтересно, а как к этому отнесётся трудовая инспекция?

К тому, что на испытательном сроке выявилось, что кандидат не соответствует требованиям?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673556
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КИнтересно, а как к этому отнесётся трудовая инспекция?

К тому, что на испытательном сроке выявилось, что кандидат не соответствует требованиям?Каким требованиям? Что кандидаты пишут программы не так, как ты хочешь? Думаю, что отнесётся с юмором. :-)

Ладно, шучу, забудь... :-)
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673557
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Алексей К, сегодня, 09:32 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21567880][21567880]
>Другими словами, если нравится программисту хранить ошибку предыдущего вызова как поле класса, твоё какое дело, если ты явно этого не запретил при постановке задачи? Разрешено всё, что не запрещено.
Алексей, не будем горячиться. Какие-то рамки всё таки должны присутствовать. Плохо то, что эти рамки хотят задавать или hVostt и К или они записано на стенках лампы.
Сложность в определении критериев. Программирование в какой-то степени искусство. Как я понимаю, у художников они есть, но если попросить написать портрет красивой женщины нескольким из них, то ни у одного из них не получится творение Леонардо. Но это совсем не означает, что все портреты плохи. Более того, давать ту или иную характеристику их работам можно только в том случае, их видишь и сравниваешь.
На мой взгляд (это личное мнение) тоже самое и в программировании - оценки можно давать, если есть с чем сравнивать, только работа программиста усугубляется ТЗ.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673562
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КА тебе не кажется, что программисты под твоим руководством занимаются онанизмом избыточным проектированием? Нет, ну если деньги девать некуда, то ради Бога...

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

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

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

А подход унылого тупого исполнителя: сказали -- сделал, не сказали -- не сделал, мне даже обсуждать не интересно, так как это вообще тупизна в высшем её проявлении.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673563
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевПлохо то, что эти рамки хотят задавать или hVostt и К или они записано на стенках лампы.
Сложность в определении критериев.

Вы что с деревьев слезли? Почитайте литературу, ознакомьтесь с принципами, статьями, докладами. По-общайтесь с другими разработчиками из серьёзных контор.

Что вы постоянно выдумываете какую-то фигню, то про фломастеры, то про сложности в определении критериев. Нет никаких сложностей, фломастеры это не инженерная дисциплина.


ВМоисеевПрограммирование в какой-то степени искусство. Как я понимаю, у художников они есть

Я думаю вот здесь и есть проблема. Когда разработчик думает, что он художник, надо его гнать в шею ссаными тряпками. Это писец. Ему в моду надо, платьями, бирюльками заниматься, а не разработкой. Пусть найдёт себя.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673564
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
казинакработал я в такой конторе,
тоже моск выносили всякими код ревью,
особенно умиляло когда шеф бесился, если в в табе не 4 а 2 пробела

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

но вот хвост нашел себя в такой атмосфере
поздравлямс!)))

Для разработчиков, кому приходится разбираться с предметной областью (адекватно формализовать, продумать архитектуру, утрясти ТЗ с заказчиком и т.п.), "красивость/правильность" кода - на десятом месте. Для чисто-кодеров, понятно, на первом. По сути, тут спорят представители разных специальностей (или разных типов - "узкие" и "широкие"). Наверное, не стоит сравнивать последствия брака в этих специальностях ("расхлебывать говнокод" vs "страдать от ошибок формализации/архитектуры"). Но понять можно и тех и других в их доводах...
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673567
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRДля разработчиков, кому приходится разбираться с предметной областью (адекватно формализовать, продумать архитектуру, утрясти ТЗ с заказчиком и т.п.), "красивость/правильность" кода - на десятом месте. Для чисто-кодеров, понятно, на первом. По сути, тут спорят представители разных специальностей (или разных типов - "узкие" и "широкие"). Наверное, не стоит сравнивать последствия брака в этих специальностях ("расхлебывать говнокод" vs "страдать от ошибок формализации/архитектуры"). Но понять можно и тех и других в их доводах...

Не нужно искать проблему там, где её нет. Либо человек говнокодер и не хочет это менять, либо профессионал. Это в любой профессии и области. Можно всё делать через жопу и доводить до стадии «работает». Но цена такому горе-профессионалу три копейки в подворотне.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673570
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttНе нужно искать проблему там, где её нет. Либо человек говнокодер и не хочет это менять, либо профессионал. Это в любой профессии и области. Можно всё делать через жопу и доводить до стадии «работает». Но цена такому горе-профессионалу три копейки в подворотне.
Не вижу никакого противоречия в том, чтобы быть профессионалом-говнокодером. Как справедливо заметил казинак, твой код всегда для кого-то будет говнокодом. Достаточно взглянуть на исходники дотнета, чтобы в этом убедиться))
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673587
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRhVosttНе нужно искать проблему там, где её нет. Либо человек говнокодер и не хочет это менять, либо профессионал. Это в любой профессии и области. Можно всё делать через жопу и доводить до стадии «работает». Но цена такому горе-профессионалу три копейки в подворотне.
Не вижу никакого противоречия в том, чтобы быть профессионалом-говнокодером. Как справедливо заметил казинак, твой код всегда для кого-то будет говнокодом. Достаточно взглянуть на исходники дотнета, чтобы в этом убедиться))

Я гляжу в исходники дотнета и библиотек из стека MS, и не убеждаюсь в этом.
Конечно, есть неудачные решения, их не мало. Я сам могу привести много таких из дотнета, и не могу похвастаться идеальным кодом во всех отношениях со своей стороны.
Но отличить код от говнокода можно по ряду критериев. Поэтому не надо ляля.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673595
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttНо отличить код от говнокода можно по ряду критериев. Поэтому не надо ляля.
В контексте спора критерий может быть лишь один - готов ли кто-то заплатить за этот код и сколько, верно?
Есть у меня знакомый математик (в школьные годы участвовал вместе с Григорием Перельманом на всесоюзной олимпиаде), зарабатывает сейчас программированием математики. Делал он нам библиотечку с серьезной математикой. Так вот, его код для меня - 100% "говнокод", однако никаких претензий по этому поводу мы ему, разумеется, не выдвигали. А заплатили очень хорошие за действительно хорошую работу.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673607
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>hVostt, сегодня, 10:45 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21568042][21568042]
>...Вы что с деревьев слезли?... Что вы постоянно выдумываете какую-то фигню…
Опять за своё. Ну не понимают жующие желуди вкус апельсина.

Я то думал, приводя версию кода ( здесь и здесь ), что мне покажут как надо писать код или, по крайней мере, почему плох мой вариант кода.

Получил ответ так и так .

Прокомментировал
Добавлю:
Зачем в коде
public class EntityQuery : IQuery<EntityQueryContext, Entity> создается var list = new List<Entity>();
Не ДОЛЖЕН РАБОТАТЬ class EntityQuery с Entity.
С Entity и списком сущностей работает класс панели (UserControl), там они и определяются. И Entity не выносится за пределы панели.
На мой взгляд, class EntityQuery должен использовать обратный вызов метода панели. У меня бывает, что одна и та же выборка, обрабатывается разными методами панели.
Но моё решение, другие делают иначе. Но не стоит вешать любимый Вами ярлык на эти варианты.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673614
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRhVosttНо отличить код от говнокода можно по ряду критериев. Поэтому не надо ляля.
В контексте спора критерий может быть лишь один - готов ли кто-то заплатить за этот код и сколько, верно?
Есть у меня знакомый математик (в школьные годы участвовал вместе с Григорием Перельманом на всесоюзной олимпиаде), зарабатывает сейчас программированием математики. Делал он нам библиотечку с серьезной математикой. Так вот, его код для меня - 100% "говнокод", однако никаких претензий по этому поводу мы ему, разумеется, не выдвигали. А заплатили очень хорошие за действительно хорошую работу.

а что конкретно у этого математика было говнокодом , кроме фатального недостатка?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673620
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttВМоисеевПрограммирование в какой-то степени искусство. Как я понимаю, у художников они есть

Я думаю вот здесь и есть проблема. Когда разработчик думает, что он художник, надо его гнать в шею ссаными тряпками. Это писец. Ему в моду надо, платьями, бирюльками заниматься, а не разработкой. Пусть найдёт себя.Художника каждый может обидеть. Сейчас обидно было! :D думаю как и художник, программист должен обладать сильным абстрактным мышлением, для удержания картины системы в целом в голове, в целом для заданного компонента. Некое внутренние видение, с учётом требования и заложенной архитектуры.
Если меня попросить нарисовать Мона Лизу, это будет ужасно некрасиво, но если я буду 10 лет практиковать это, может, что и получится =) Так же и в программировании, качественный код не может быть у человека, который только начал свой путь в этом направлении. Навыки появляются не за 1 год, понимание многих вещей в том числе. И для понимания нужно обладать огромным количеством знаний, на вроде того, как работает процессор, чтоб понимать, что в результате ты действительно написал. я программирую около 20 лет, профессионально около 10, не считаю себя гуру или "Ван Гогом".

p.s. так как не считаю себя гуру, часто не даю советов в которых сам не уверен =)
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673623
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRВ контексте спора критерий может быть лишь один - готов ли кто-то заплатить за этот код и сколько, верно?

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

LRЕсть у меня знакомый математик (в школьные годы участвовал вместе с Григорием Перельманом на всесоюзной олимпиаде), зарабатывает сейчас программированием математики. Делал он нам библиотечку с серьезной математикой. Так вот, его код для меня - 100% "говнокод", однако никаких претензий по этому поводу мы ему, разумеется, не выдвигали. А заплатили очень хорошие за действительно хорошую работу.

И что, библиотека поддерживается? Развивается? Участвует в различных проектах? Посмотрите на код в гитхабе у библиотек с большой популярностью. Они написаны качественно, покрыты тестами, следуют практикам и принципам. Некоторые годами развиваются и при этом не ломают тысячи и сотни тысяч проектов, в которых применяются (инциденты бывают, но крайне редко).

Они что, по-вашему, долбанулись?
Им промыли мозги?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673625
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевОпять за своё. Ну не понимают жующие желуди вкус апельсина.

Почему вы себя все время сравниваете со свиньями? Вы же не хотите профессионально расти, вам и жёлуди подходят.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673628
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesХудожника каждый может обидеть. Сейчас обидно было!

Художник тут в том смысле, как как вижу, так и рисую. Что вижу, то и пою. Как хочу так и делаю.

Как будто кто-то мешает. В конторы только главное не напрашиваться, где люди работают, и у них есть цели и задачи. Хочешь быть художником, пожалуйста, инди разработку никто не отменял.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673629
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttИ что, библиотека поддерживается? Развивается? Участвует в различных проектах? Посмотрите на код в гитхабе у библиотек с большой популярностью. Они написаны качественно, покрыты тестами, следуют практикам и принципам. Некоторые годами развиваются и при этом не ломают тысячи и сотни тысяч проектов, в которых применяются (инциденты бывают, но крайне редко).
Они что, по-вашему, долбанулись?
Им промыли мозги?мне кажется продакшн код выкладывая в паблик, стыдно выкладывать, если это говнокод :) мне иногда и самому стыдно бывает :)

самый лучший способ учиться не говнокодить, изучать потроха dot.net'а, там многое уже реализовано. Просто вспомните где есть подобное тому, что вам нужно, зайдите на сайт мс или декомрилер и читай на здоровье.
даже декомпиляторы выдают вполне красивый код, местами правда перегруженный по тексту
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673640
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевНо моё решение, другие делают иначе. Но не стоит вешать любимый Вами ярлык на эти варианты.

Вы чего хотите, я не понимаю, печеньку? Делайте как хотите.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673645
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachа что конкретно у этого математика было говнокодом , кроме фатального недостатка?
"Говнокод" - понятие совершенно субъективное (это hVostt считает его объективным).
Конкретно там мне не понравился "процедурный стиль", old school)) Множество статических публичных членов, доступных и обновляемых из такого же неструктурированного (для меня, для него, не сомневаюсь, очень даже структурированного) множества различных процедур.

hVosttИ что, библиотека поддерживается? Развивается? Участвует в различных проектах?
Библиотека успешно эксплуатируется. Никакой необходимости в развитии нет и не предвидится.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673667
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LR"Говнокод" - понятие совершенно субъективное (это hVostt считает его объективным).

Давайте так. Вам знакомы хоть какие-то критерии качества кода? Нет? Ну тогда не нужно выдумывать про субъективные понятия. Да? Ну тогда вы себе противоречите.

LRБиблиотека успешно эксплуатируется. Никакой необходимости в развитии нет и не предвидится.

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

Мы говорим про профессию, а вы про случай, как в моём примере, когда зашили рану ржавой иглой и пацинет выжил. Это что-то доказывает? Даже не смешно.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673670
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesсамый лучший способ учиться не говнокодить

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

Никто со своим кодом на выставки не ездит и премии за качество кода не получает.
Именно поэтому, некоторые люди не понимают, зачем тогда писать качественный хороший код.

Зачастую это одиночки. Всё просто блин, как дважды два. И такие люди очень тяжело вписываются в командную разработку, а зачастую так и не вписываются.

Хорошо, если у них есть стабильное пригретое место, где они могут продержаться до пенсии.
Тогда вопросов нет.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673673
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttНу в точку! Стоимость говнокодера намного дешевле, чем профессионального разработчика, который пишет качественный код и стремиться к этому, без бумажек, тыканий мордой и пинков.
Да, мысль приставить к этому математику "разработчика, который пишет качественный код", могла бы промелькнуть но и только. Вероятность ошибок реализации в таком случае многократно бы возросла, не говоря уже о времени, нервах и трудозатратах.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673685
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttLR"Говнокод" - понятие совершенно субъективное (это hVostt считает его объективным).

Давайте так. Вам знакомы хоть какие-то критерии качества кода? Нет? Ну тогда не нужно выдумывать про субъективные понятия. Да? Ну тогда вы себе противоречите.
Уже вроде все согласились - если код покупают (и кодер с этого живет) - это качественный/пофессиональный код.

hVosttМы говорим про профессию, а вы про случай, как в моём примере, когда зашили рану ржавой иглой и пацинет выжил. Это что-то доказывает? Даже не смешно.
Профессия - то, что кормит. Если "говнокодеры" зарабатывают "говнокодерством" - они профессионалы.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673705
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRhVosttпропущено...


Давайте так. Вам знакомы хоть какие-то критерии качества кода? Нет? Ну тогда не нужно выдумывать про субъективные понятия. Да? Ну тогда вы себе противоречите.
Уже вроде все согласились - если код покупают (и кодер с этого живет) - это качественный/пофессиональный код.



Слово "качественный" тут лишнее.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673709
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRУже вроде все согласились - если код покупают (и кодер с этого живет) - это качественный/пофессиональный код.
Как говорил Жириновский: "Каждой бабе по мужику")).
Для кого то привокзальный представитель это качественный, профессиональный код. Мужик
Вот если он непросто живёт, а очень хорошо живет)))))
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673712
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiLRпропущено...

Уже вроде все согласились - если код покупают (и кодер с этого живет) - это качественный/пофессиональный код.



Слово "качественный" тут лишнее.
Почему? Код - товар. Вы же не будете покупать недостаточно качественный товар? Если хотите, пусть будет "достаточно качественный".
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673717
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRschiпропущено...


Слово "качественный" тут лишнее.
Почему? Код - товар. Вы же не будете покупать недостаточно качественный товар? Если хотите, пусть будет "достаточно качественный".

Потому что лишнее. Код - это не товар, товар - это в лучшем случае результат компиляции кода.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673719
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRДа, мысль приставить к этому математику "разработчика, который пишет качественный код", могла бы промелькнуть но и только. Вероятность ошибок реализации в таком случае многократно бы возросла, не говоря уже о времени, нервах и трудозатратах.

Именно поэтому написание бизнес-логики мы вынесли в DSL на Lua, который пишут аналитики, а они ни разу не программисты. Просто пишут обычные сценарии. Среди них есть и математические, и довольно таки сложные. Но код линейный, способы компоновки задано архитектурой, тонны проверок, чтобы аналитик не выстрелил себе в ногу.

LRПрофессия - то, что кормит. Если "говнокодеры" зарабатывают "говнокодерством" - они профессионалы.

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

О чём вы говорите вообще? Если каждый «художник» будет приходить и писать как лично ему кажется правильным, потом приходит другой и пытается догадаться, что имел в виду предыдущий художник.

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

А если приходит очередной жеватель желудей, Вася, который думает что это апельсины, который клал хер на всё и на всех, засунул свои ошибки в какую-то статическую переменную на задворках, где теперь искать концы? Разбираться что там, будет ли это работать в многопоточной среде, что делать если статического текста нехватает, всё переписывать? И громко материться?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673738
казинак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttИменно поэтому написание бизнес-логики мы вынесли в DSL на Lua, который пишут аналитики, а они ни разу не программисты.
если бизнес-логику пишут аналитики то на хрена там вы?
заказчику то нужна бизнес-логика, а не ваши красивости в коде
я так понимаю вы просто пильщики
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673744
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
казинак,

значит там "бизнес - логика" детский лепет
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673823
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANA Функциональный C#. Часть 4. Обработка исключений

Угу, автор, как это обычно бывает, намеренно привёл отвратительную реализацию в противовес своему подходу:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
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.
[HttpPost]
public HttpResponseMessage CreateCustomer(string name, string billingInfo)
{
    Result<CustomerName> customerNameResult = CustomerName.Create(name);
    if (customerNameResult.Failure)
    {
        _logger.Log(customerNameResult.Error);
        return Error(customerNameResult.Error);
    }
 
    Result<BillingInfo> billingInfoResult = BillingInfo.Create(billingInfo);
    if (billingInfoResult.Failure)
    {
        _logger.Log(billingInfoResult.Error);
        return Error(billingInfoResult.Error);
    }
 
    Customer customer = new Customer(customerNameResult.Value);
 
    try
    {
        _repository.Save(customer);
    }
    catch (SqlException)
    {
        _logger.Log(“Unable to connect to database”);
        return Error(“Unable to connect to database”);
    }
 
    _paymentGateway.ChargeCommission(billingInfoResult.Value);
 
    _emailSender.SendGreetings(customerNameResult.Value);
 
    return new HttpResponseMessage(HttpStatusCode.OK);
}




А теперь перепишем, как это должно было быть:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
[HttpPost]
public HttpResponseMessage CreateCustomer(string name, string billingInfo)
{
    var customerName = CustomerName.Create(name); 
    var billingInfo = BillingInfo.Create(billingInfo);
    var customer = new Customer(customerName);
    _repository.Save(customer);
    _paymentGateway.ChargeCommission(billingInfo);
    _emailSender.SendGreetings(customerName);
    return new HttpResponseMessage(HttpStatusCode.OK);
}




Ну вот. Чисто, понятно. Хотя и здесь на контроллер возложено слишком много обязанностей, в нём выполняется многовато бизнес-логики.

Что касается кода, приведённого в конце, как решение всех проблем, то там уже очевидная проблема в коде, которого изначально и не было:

Код: c#
1.
2.
3.
4.
.OnSuccess(
            customer => _repository.Save(customer)
                .OnFailure(() => _paymentGateway.RollbackLastTransaction())
        )




И вот это, "отлов ошибок" типа в функциональном стиле, чтобы потом сделать ровно тоже самое, что может сделать фильтр API, выгоды не видно совсем. Если же внутри всё написано в таком же ключе, то весь путь ошибки, проброшенный через эти "промисы" потеряется окончательно, всё ради того, чтобы залогировать корень проблемы, но не её путь. Хотя если каждый компонент по пути следования ошибки будет оборачивать в свою структуру, то... привет недоделанные исключения! Ещё строчку и файл нужно добавлять, тогда вообще будет сказка. Поехали на нашем велосипеде, чё ты, бросай это старьё

Ладно, если такой подход позволял раньше более или менее красиво обойти проблему коллбеков при асинхронном подходе, сейчас при наличии async/await, это зачем нужно, непонятно.

В общем, статья не убедительна, но как пример, что можно ещё так накостылить, показательна :) Где-то может будет удобно применить подобный подход, но плюсов не вижу. Функциональный стиль, здесь с большим натягом.
Конечно статья не убидительна, ведь ты её читал по диагонали судя по тому, что приводишь пример того, как типа должно быть ровно такой, с чего она начинается
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673826
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttlove_bachне понял, често что ты хотел сказать. и адвокат, и прокурор одновременно. "Видим, что Result тут приходит из сервисов", ну и что, каким это боком к исключениям?

Здесь речь идёт о том, что все исключения надо подавлять везде на самой ранней стадии, т.е. по сути придётся бороться с исключениями.вообще-то это не борьба, не подавление, а правило
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673830
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673834
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>hVostt, сегодня, 10:45 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21568042][21568042]
>...Вы что с деревьев слезли?... Что вы постоянно выдумываете какую-то фигню…
Опять за своё. Ну не понимают жующие желуди вкус апельсина.

Я то думал, приводя версию кода ( здесь и здесь ), что мне покажут как надо писать код или, по крайней мере, почему плох мой вариант кода.

Получил ответ так и так .

Прокомментировал
Добавлю:
Зачем в коде
public class EntityQuery : IQuery<EntityQueryContext, Entity> создается var list = new List<Entity>();
Не ДОЛЖЕН РАБОТАТЬ class EntityQuery с Entity.
С Entity и списком сущностей работает класс панели (UserControl), там они и определяются. И Entity не выносится за пределы панели.
На мой взгляд, class EntityQuery должен использовать обратный вызов метода панели. У меня бывает, что одна и та же выборка, обрабатывается разными методами панели.
Но моё решение, другие делают иначе. Но не стоит вешать любимый Вами ярлык на эти варианты.Я могу объяснить смысл и плюсы данного подхода.
Но кажется мне, что Вы не готовы слушать и понимать.
Судя по тому, что Вы не увидели, что общая часть уехала в базовый класс, и нет в итоге в EntityQuery выражения var list = new List<Entity>();
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673841
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевС Entity и списком сущностей работает класс панели (UserControl), там они и определяются. И Entity не выносится за пределы панели.
Простите, а что Вы в базе храните?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673863
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>skyANA, сегодня, 17:17 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21569592][21569592]
>Простите, а что Вы в базе храните?
На данный момент занимаюсь ГИС. Значит как минимум у объектов есть географические координаты.
Конкретнее - есть задача отображения положения объектов на географической карте в заданное время.
1. Есть объекты и их состояние (положение на карте)
2. Есть документы (извещения), которые меняют состояние объектов.
3. В процессе развития, объекты могут появляться или пропадать.
4. Одним из параметров извещения является время.
Попытка решения в лоб - ищется группа извещений, время которых меньше заданного, а группе ищутся с максимальным временем - оказалась не состоятельной. Задача перешла из режима отчетного документа в интерактивный режим. А здесь присутствует фактор времени. Десятки минут не катят.
Пока ничего лучшего не придумал, кроме как строить в дополнительной таблицы временные срезы и извещения выбирать не из всего множества, а из диапазона между срезом и заданной датой.

Я буду крайне благодарен за любую положительную идею и конструктивную критику. Задача уже немного надоела, но надо сделать.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673868
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевЯ буду крайне благодарен за любую положительную идею и конструктивную критику. Задача уже немного надоела, но надо сделать.тема топика совсе другая.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673873
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,

сколько таких объектов и как часто приходят извещения (что такое?)
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673885
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAКонечно статья не убидительна, ведь ты её читал по диагонали судя по тому, что приводишь пример того, как типа должно быть ровно такой, с чего она начинается

Я не нашёл недостающие части, которые потом воткнули в fluent цепочку вызовов делегатов. Ну и решил исправить обратно именно результат.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673886
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA https://enterprisecraftsmanship.com/2015/02/26/exceptions-for-flow-control-in-c/

Согласен с исследованиями и выводами. И к чему это в данном контексте?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673887
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>ViPRos, сегодня, 18:43 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21569774][21569774]
>сколько таких объектов и как часто приходят извещения (что такое?)
Нужных решаемой задаче объектов - несколько сотен, нужных задаче извещений (документов) думаю в пределах десятка тысяч в год.
Беда в том что объекты и извещения не разбиты по группам, а свалены в одну кучу, а всевозможных объектов в системе десятки (а может и сотни) тысяч. Общее количество приходящих и отправляемых извещений в год я не знаю. Но они копятся.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39673904
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,

Ну, если бы просто рассказал о проблеме (на языке предметной области) возможно чем то помогли, но ты описываешь свое решение. :(
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39675105
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>skyANA, сегодня, 17:17 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21569592][21569592]
>Простите, а что Вы в базе храните?
На данный момент занимаюсь ГИС. Значит как минимум у объектов есть географические координаты.
Конкретнее - есть задача отображения положения объектов на географической карте в заданное время.
1. Есть объекты и их состояние (положение на карте)
2. Есть документы (извещения), которые меняют состояние объектов.
3. В процессе развития, объекты могут появляться или пропадать.
4. Одним из параметров извещения является время.
Попытка решения в лоб - ищется группа извещений, время которых меньше заданного, а группе ищутся с максимальным временем - оказалась не состоятельной. Задача перешла из режима отчетного документа в интерактивный режим. А здесь присутствует фактор времени. Десятки минут не катят.
Пока ничего лучшего не придумал, кроме как строить в дополнительной таблицы временные срезы и извещения выбирать не из всего множества, а из диапазона между срезом и заданной датой.

Я буду крайне благодарен за любую положительную идею и конструктивную критику. Задача уже немного надоела, но надо сделать.но при этом "С Entity и списком сущностей работает класс панели (UserControl), там они и определяются. И Entity не выносится за пределы панели"

То есть объекты, что Вы храните в базе, это не сущности Вашей предметной области?
Или у Вас есть такие сущности, есть сякие. Одни обзываются Entity, другие иначе?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39675237
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>skyANA, сегодня, 15:18 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21578002] [21578002]
>Или у Вас есть такие сущности, есть сякие. Одни обзываются Entity, другие иначе?
Да, именно так.
Вот простой пример, с одной сущностью:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
namespace ns_ГИС {
  public partial class uc_СрезТБ : UserControl, I_Плитка {
    public row_Entity xrow, yrow;
    ObservableCollection<row_Entity> oc_Entity = new ObservableCollection<row_Entity>();  //-- Показываем в DataGrid 
    List<row_Entity> lst_Entity; //-- Временное хранение выборки
    OracleParameter[] asp;
    . . .
  //-- Класс, что ассоциируется с выборкой из временного среза и выборкой по извещениям
  public class row_Entity {
    public row_Entity(
       . . .   
       string _rn,
       DateTime _datesre
    ) {
    . . .


Запрос на формирование выборки извещений:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
   .  .  .
  //-- Загружаем новейшие извещения выделенного диапазона
  lst_Entity = null; lst_Entity = new List<row_Entity>();
  asp = new OracleParameter[3] {
     new OracleParameter("cur_viborka", OracleDbType.Cursor, ParameterDirection.Output),
     new OracleParameter("x_dt_srez_new", dt_srez_new),
     new OracleParameter("x_dt_srez_old", dt_srez_min)
  };
  await Task.Run(() => wsp.Entity_SP("NCUYAO_GIS.Srez_Dop", wsp.sp_Sel, asp, RowToEntityIzv));
  if (wsp.wspErr != null) goto mp1;
   .  .  .

Примерно вот так формируем выборку из извещений.
Так отражаем её строку на сущность:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    //-- Строку выбоки из таблиц базы данных отражаем на entity 
    private void RowToEntityIzv(IDataRecord record) {
      xrow = new row_Entity() {
        . . .
        dateizm = record.GetDateTime(6),
        rn = record.GetString(7),
        datesre = dt_srez_new
      };
       lst_Entity?.Add(xrow);
    }
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39675298
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
жесть
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39675603
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,

и что же означает на Вашем языке "Entity не выносится за пределы панели"?
я вижу, что это публичный класс на весь Ваш ГИС...
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39675666
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>skyANA, сегодня, 15:18 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21578002] [21578002]
>Или у Вас есть такие сущности, есть сякие. Одни обзываются Entity, другие иначе?
Да, именно так.
Вот простой пример, с одной сущностью:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
namespace ns_ГИС {
  public partial class uc_СрезТБ : UserControl, I_Плитка {
    public row_Entity xrow, yrow;
    ObservableCollection<row_Entity> oc_Entity = new ObservableCollection<row_Entity>();  //-- Показываем в DataGrid 
    List<row_Entity> lst_Entity; //-- Временное хранение выборки
    OracleParameter[] asp;
    . . .
  //-- Класс, что ассоциируется с выборкой из временного среза и выборкой по извещениям
  public class row_Entity {
    public row_Entity(
       . . .   
       string _rn,
       DateTime _datesre
    ) {
    . . .



Запрос на формирование выборки извещений:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
   .  .  .
  //-- Загружаем новейшие извещения выделенного диапазона
  lst_Entity = null; lst_Entity = new List<row_Entity>();
  asp = new OracleParameter[3] {
     new OracleParameter("cur_viborka", OracleDbType.Cursor, ParameterDirection.Output),
     new OracleParameter("x_dt_srez_new", dt_srez_new),
     new OracleParameter("x_dt_srez_old", dt_srez_min)
  };
  await Task.Run(() => wsp.Entity_SP("NCUYAO_GIS.Srez_Dop", wsp.sp_Sel, asp, RowToEntityIzv));
  if (wsp.wspErr != null) goto mp1;
   .  .  .


Примерно вот так формируем выборку из извещений.
Так отражаем её строку на сущность:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    //-- Строку выбоки из таблиц базы данных отражаем на entity 
    private void RowToEntityIzv(IDataRecord record) {
      xrow = new row_Entity() {
        . . .
        dateizm = record.GetDateTime(6),
        rn = record.GetString(7),
        datesre = dt_srez_new
      };
       lst_Entity?.Add(xrow);
    }


А покажите пожалуйста списко using-ов, используемых классом uc_СрезТБ.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39675670
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев
Код: c#
1.
lst_Entity?.Add(xrow)


А что, может случиться, что lst_Entity будет null ?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39675704
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

да просто надо посмотреть что это за "row_Entity" и все станет ясно
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39675707
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

что конкретно станет ясно?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39675739
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAViPRos,

что конкретно станет ясно?
зачем вся эта белиберда
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39675743
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,

а скажите ещё вот что: класс панели (UserControl) к какому из описанных Вами выше 5-ти слоёв относится?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39675749
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANA https://enterprisecraftsmanship.com/2015/02/26/exceptions-for-flow-control-in-c/

Согласен с исследованиями и выводами. И к чему это в данном контексте?
К тому, ч то там один из выводов - это:
If you know how to deal with exceptions a library throws, catch them at the lowest level possible .
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39675810
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAIf you know how to deal with exceptions a library throws, catch them at the lowest level possible .

If you know how to deal with exceptions a library throws , чего не выделил? )
Засунуть пойманное исключение внутрь OperationResult это из разряда shut up, I know what I'm doing
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39675843
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAIf you know how to deal with exceptions a library throws, catch them at the lowest level possible .

If you know how to deal with exceptions a library throws , чего не выделил? )
Оставил оригинальное выделение, что в статье, прикинь
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39675906
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>skyANA, сегодня, 13:08 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21580889][21580889]
>...я вижу, что это публичный класс на весь Ваш ГИС...
Вы не правы:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
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.
using Devart.Data.Oracle;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;

namespace ns_ГИС {
  public partial class uc_СНВсрезТБ : UserControl, I_Плитка {
    public row_Entity xrow, yrow;
    ObservableCollection<row_Entity> oc_Entity = new ObservableCollection<row_Entity>();  //-- Показываем в DataGrid 
    List<row_Entity> lst_Entity; //-- Временное хранение выборки
    OracleParameter[] asp;
    . . .     
    //-- Класс, что ассоциируется с выборкой из временного среза и выборкой по извещениям
    public class row_Entity {
      public row_Entity(
        bool _chb_Entity,
        string _pk,
        string _namvrr,
        string _numdoc,
        string _mesto,
        string _lat,
        string _lng,
        DateTime _dateizm,
        string _rn,
        DateTime _datesre
      ) {
        this.chb_Entity    = _chb_Entity;
        this.pk     = _pk;
        this.namvrr = _namvrr;
        this.numdoc = _numdoc;
        this.mesto = _mesto;
        this.lat = _lat;
        this.lng = _lng;
        this.dateizm = _dateizm;
        this.rn = _rn;
        this.datesre = _datesre;
      }
      public row_Entity() {; }
      public bool chb_Entity { get; set; }
      public string pk { get; set; }
      public string namvrr { get; set; }
      public string numdoc { get; set; }
      public string mesto { get; set; }
      public string lat { get; set; }
      public string lng { get; set; }
      public DateTime dateizm { get; set; }
      public string rn { get; set; }
      public DateTime datesre { get; set; }
    }
    public uc_СНВсрезТБ(MainWindow omw, Object oUC) {
      InitializeComponent();
      . . .
      dpr_Срез.SelectedDate = DateTime.Now; 
    }
    . . . 



А что, может случиться, что lst_Entity будет null?
Список не нужен.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39675932
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ВМоисеев>skyANA, сегодня, 13:08 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21580889][21580889]
>...я вижу, что это публичный класс на весь Ваш ГИС...
Вы не правы:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
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.
using Devart.Data.Oracle;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;

namespace ns_ГИС {
  public partial class uc_СНВсрезТБ : UserControl, I_Плитка {
    public row_Entity xrow, yrow;
    ObservableCollection<row_Entity> oc_Entity = new ObservableCollection<row_Entity>();  //-- Показываем в DataGrid 
    List<row_Entity> lst_Entity; //-- Временное хранение выборки
    OracleParameter[] asp;
    . . .     
    //-- Класс, что ассоциируется с выборкой из временного среза и выборкой по извещениям
    public class row_Entity {
      public row_Entity(
        bool _chb_Entity,
        string _pk,
        string _namvrr,
        string _numdoc,
        string _mesto,
        string _lat,
        string _lng,
        DateTime _dateizm,
        string _rn,
        DateTime _datesre
      ) {
        this.chb_Entity    = _chb_Entity;
        this.pk     = _pk;
        this.namvrr = _namvrr;
        this.numdoc = _numdoc;
        this.mesto = _mesto;
        this.lat = _lat;
        this.lng = _lng;
        this.dateizm = _dateizm;
        this.rn = _rn;
        this.datesre = _datesre;
      }
      public row_Entity() {; }
      public bool chb_Entity { get; set; }
      public string pk { get; set; }
      public string namvrr { get; set; }
      public string numdoc { get; set; }
      public string mesto { get; set; }
      public string lat { get; set; }
      public string lng { get; set; }
      public DateTime dateizm { get; set; }
      public string rn { get; set; }
      public DateTime datesre { get; set; }
    }
    public uc_СНВсрезТБ(MainWindow omw, Object oUC) {
      InitializeComponent();
      . . .
      dpr_Срез.SelectedDate = DateTime.Now; 
    }
    . . . 




А что, может случиться, что lst_Entity будет null?
Список не нужен.
Вы бы оставили нужное для понимания. а не все сто тыщь строк тащить
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39675941
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Cat2, сегодня, 23:49 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21582986][21582986]
>Вы бы оставили нужное для понимания. а не все сто тыщь строк тащить
Посмотрите на это , это , это , это , а Вы то зачем сто тыщь строк тащите, можно и ссылку.
Вы сами то понимаете, что это …не публичный класс на весь Ваш ГИС..
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39676014
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>skyANA, сегодня, 13:08 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21580889][21580889]
>...я вижу, что это публичный класс на весь Ваш ГИС...
Вы не правы:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
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.
using Devart.Data.Oracle;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;

namespace ns_ГИС {
  public partial class uc_СНВсрезТБ : UserControl, I_Плитка {
    public row_Entity xrow, yrow;
    ObservableCollection<row_Entity> oc_Entity = new ObservableCollection<row_Entity>();  //-- Показываем в DataGrid 
    List<row_Entity> lst_Entity; //-- Временное хранение выборки
    OracleParameter[] asp;
    . . .     
    //-- Класс, что ассоциируется с выборкой из временного среза и выборкой по извещениям
    public class row_Entity {
      public row_Entity(
        bool _chb_Entity,
        string _pk,
        string _namvrr,
        string _numdoc,
        string _mesto,
        string _lat,
        string _lng,
        DateTime _dateizm,
        string _rn,
        DateTime _datesre
      ) {
        this.chb_Entity    = _chb_Entity;
        this.pk     = _pk;
        this.namvrr = _namvrr;
        this.numdoc = _numdoc;
        this.mesto = _mesto;
        this.lat = _lat;
        this.lng = _lng;
        this.dateizm = _dateizm;
        this.rn = _rn;
        this.datesre = _datesre;
      }
      public row_Entity() {; }
      public bool chb_Entity { get; set; }
      public string pk { get; set; }
      public string namvrr { get; set; }
      public string numdoc { get; set; }
      public string mesto { get; set; }
      public string lat { get; set; }
      public string lng { get; set; }
      public DateTime dateizm { get; set; }
      public string rn { get; set; }
      public DateTime datesre { get; set; }
    }
    public uc_СНВсрезТБ(MainWindow omw, Object oUC) {
      InitializeComponent();
      . . .
      dpr_Срез.SelectedDate = DateTime.Now; 
    }
    . . . 

О, дак это вложенный тип.

Но у него модификатор доступа public , и у контейнера public , то есть бери и пользуйся:
Код: c#
1.
var entity = new ns_ГИС.uc_СНВсрезТБ.row_Entity();


И в чём тут смысл? Вы ведь не используете в нём переменные и методы контейнера.
И зачем в нём определены конструкторы, когда все свойтва имеют публичные сеттеры?

ВМоисеевА что, может случиться, что lst_Entity будет null?
Список не нужен.Иначе задам вопрос: разве может случиться так, что lst_Entity будет null в момент вызова метода Add?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39676016
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,

если понядобится формировать отчёт и отправлять его на e-mail заинтересованным лицам к примеру каждый понедельник автоматически, не через интерфейс программы,
то Вы ещё один класс заведёте, аналогичный row_Entity?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39676017
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевПопытка решения в лоб - ищется группа извещений, время которых меньше заданного, а группе ищутся с максимальным временем - оказалась не состоятельной. Задача перешла из режима отчетного документа в интерактивный режим. А здесь присутствует фактор времени. Десятки минут не катят.
Пока ничего лучшего не придумал, кроме как строить в дополнительной таблицы временные срезы и извещения выбирать не из всего множества, а из диапазона между срезом и заданной датой.

Я буду крайне благодарен за любую положительную идею и конструктивную критику. Задача уже немного надоела, но надо сделать.
А в чём проблема-то? Хранимка медленно отрабатывает?
Показывайте структуру таблиц и толком объясните задачу.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39676059
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>skyANA, сегодня, 09:01 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21583428] [21583428]
>Иначе задам вопрос: разве может случиться так, что lst_Entity будет null в момент вызова метода Add?
Да. У меня хранимые процедуры, реализующие INSERT, UPDATE, DELETE возвращают выборку из одной строки - список не нужен.
Пример:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
    private async void fun_Ins() { 
      гп.bl_Разрешение = false;
      
      xrow = null;  lst_Entity = null;
      //-- Готовим параметр запроса
      asp = new OracleParameter[4] {
        new OracleParameter("cur_viborka", OracleDbType.Cursor, ParameterDirection.Output),
        new OracleParameter("xnom_inspek", yrow.str_НомИнспек),
        new OracleParameter("xdt_inspek", yrow.dt_Инспек),
        new OracleParameter("xfk_AON", yrow.fk_АОН)
      };
      //-- Запись в таблицу
      при.tmrStart(); await Task.Run(() => wsp.Entity_SP("NCUYAO_GIS.Trassi_Ins", wsp.sp_Ins, asp, RowToEntity)); при.tmrStop();
      if (wsp.wspErr != null) MessageBox.Show(wsp.wspErr, caption_Entity, MessageBoxButton.OK);

      if (xrow != null) {
        xrow.chb_Entity = true;
        oc_Entity.Add(xrow);
        iRow = oc_Entity.IndexOf(xrow);
        dgv_Entity.ScrollIntoView(xrow);
        dgv_Entity.SelectedIndex = iRow;
      }
     . . .


lst_Entity может принимать значение null, ссылки на пустой список, ссылки на заполненный список.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39676071
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>skyANA, сегодня, 09:10 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21583444][21583444]
>А в чём проблема-то? Хранимка медленно отрабатывает?
Да.
Если интересно, то см. здесь , здесь и здесь .
Структуру всех таблиц для построения нужной мне выборки по извещениям я не знаю. Контора сопровождает инфосистему, сделанную другими. Код ХР подсмотрели у тех, кто до нас.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39676090
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>skyANA, сегодня, 09:01 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21583428] [21583428]
>Иначе задам вопрос: разве может случиться так, что lst_Entity будет null в момент вызова метода Add?
Да. У меня хранимые процедуры, реализующие INSERT, UPDATE, DELETE возвращают выборку из одной строки - список не нужен.
Пример:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
    private async void fun_Ins() { 
      гп.bl_Разрешение = false;
      
      xrow = null;  lst_Entity = null;
      //-- Готовим параметр запроса
      asp = new OracleParameter[4] {
        new OracleParameter("cur_viborka", OracleDbType.Cursor, ParameterDirection.Output),
        new OracleParameter("xnom_inspek", yrow.str_НомИнспек),
        new OracleParameter("xdt_inspek", yrow.dt_Инспек),
        new OracleParameter("xfk_AON", yrow.fk_АОН)
      };
      //-- Запись в таблицу
      при.tmrStart(); await Task.Run(() => wsp.Entity_SP("NCUYAO_GIS.Trassi_Ins", wsp.sp_Ins, asp, RowToEntity)); при.tmrStop();
      if (wsp.wspErr != null) MessageBox.Show(wsp.wspErr, caption_Entity, MessageBoxButton.OK);

      if (xrow != null) {
        xrow.chb_Entity = true;
        oc_Entity.Add(xrow);
        iRow = oc_Entity.IndexOf(xrow);
        dgv_Entity.ScrollIntoView(xrow);
        dgv_Entity.SelectedIndex = iRow;
      }
     . . .



lst_Entity может принимать значение null, ссылки на пустой список, ссылки на заполненный список.
Мда, как же всё у Вас прибито гвоздями...
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39676093
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>skyANA, сегодня, 09:10 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21583444][21583444]
>А в чём проблема-то? Хранимка медленно отрабатывает?
Да.
Если интересно, то см. здесь , здесь и здесь .
Структуру всех таблиц для построения нужной мне выборки по извещениям я не знаю. Контора сопровождает инфосистему, сделанную другими. Код ХР подсмотрели у тех, кто до нас.
Если Вы за два года ни структуры, ни плана, ни индексов не узнали, то боюсь Вам не помочь.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39676102
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,

всё сидите на Oracle 8i? изменения в БД идут исключительно через хранимки?
свои объекты в БД создавать есть возможность? изменять хранимые процедуры?

если да, то смотрите в сторону денормализации... летать будет всё со страшной силой
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39676121
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>skyANA, сегодня,
>10:41 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21584048][21584048]
>Мда, как же всё у Вас прибито гвоздями…
Интересно, видим одно и тоже - выводы делаем диаметрально противоположные. Я стремился создать одну гибкую конструкцию обработки выборки из ХП, Вы же на каждый чих создаёте класс, что чуждо для меня.
Например, как формирую извещения для крайнего изменения состояния объектов:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
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.
       . . . 
       else { //-- Крайний срез существует
          //-- Загружаем параметры крайнего среза 
          lst_Entity = null; lst_Entity = new List<row_Entity>();
          asp = new OracleParameter[2] {
            new OracleParameter("cur_viborka", OracleDbType.Cursor, ParameterDirection.Output),
            new OracleParameter("x_datesre", dt_srez_old)
          };
          await Task.Run(() => wsp.Entity_SP("NCUYAO_GIS.Srez_Sel", wsp.sp_Sel, asp, RowToEntitySre));
          if (wsp.wspErr != null) goto mp1;

          //-- Загружаем макс. по времени извещения после крайнего среза в уже имеющийся список сущностей
          asp = new OracleParameter[3] {
            new OracleParameter("cur_viborka", OracleDbType.Cursor, ParameterDirection.Output),
            new OracleParameter("x_dt_srez_new", dt_srez_new),
            new OracleParameter("x_dt_srez_old", dt_srez_old)
          };
          await Task.Run(() => wsp.Entity_SP("NCUYAO_GIS.Srez_Dop", wsp.sp_Sel, asp, RowToEntityIzv2));
          if (wsp.wspErr != null) goto mp1;
        }
      }
      //-- Покажем выборку
      if (lst_Entity != null) {
        //-- Сортируем список
        lst_Entity = lst_Entity.OrderBy(x => x.mesto).ThenByDescending(x => x.rn).ThenBy(x => x.pk).ToList();
        oc_Entity = new ObservableCollection<row_Entity>(lst_Entity);
        lst_Entity = null;
        dgv_Entity.ItemsSource = oc_Entity;
       . . . 
    private void RowToEntitySre(IDataRecord record) {
      xrow = new row_Entity() {. . . };
      lst_Entity?.Add(xrow);
    }
    private void RowToEntityIzv2(IDataRecord record) {
      xrow = new row_Entity() { . . . };
      //-- Сушность xrow.рк есть в списке?
      int i = lst_Entity.FindIndex((x => x.pk == xrow.pk));
      if (i == -1)  lst_Entity.Add(xrow);  //--Нет
      else if(xrow.dateizm > lst_Entity[i].dateizm) { lst_Entity.RemoveAt(i); lst_Entity.Add(xrow); }   //--Есть
    }
    . . .
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39676137
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

этот rowEntity нафиг никому не нужен вовсе
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39676138
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевВы же на каждый чих создаёте класс, что чуждо для меня

Что-то вас не парит использования классов, созданных «на каждый чих», из библиотек .NET.
Вы просто не хотите ничему учиться, уже скоро год пройдёт, как вы копируете одни и те же
тексты с плохим кодом, и все советы и рекомендации прошли мимо. Просто тратите чужое время.
Зачем?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39676148
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttуже скоро год пройдёт, как вы копируете одни и те же
тексты с плохим кодом, и все советы и рекомендации прошли мимо. Просто тратите чужое время.
Зачем?
не спрашивай. Бесполезно.
Я не понимаю зачем эту тему опять подняли.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39676152
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,

и в чём же гибкость?

У Вас интерфейс гвоздями прибит к базе Oracle и логика с ними перемешана.
Понадобится что-то качественно изменить и фигушки. Скажете, что это не предполагалось и надо всё переписывать.
Тупо вызвать хранимку без параметров и возвращающую NUMBER вместо курсора Ваша конструкция уже не позволяет.

А гибкость - это быстрая и лёгкая реакция на новые требования.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39676153
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosskyANA,

этот rowEntity нафиг никому не нужен вовсеДа там весь проект на фиг никому не нужен.
Было бы иначе, то давно бы всплыли очевидные косяки архитектуры.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39676253
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>skyANA, сегодня, 12:35 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21584720][21584720]
>...У Вас интерфейс гвоздями прибит к базе Oracle и логика с ними перемешана…
Вы не правы:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
namespace ns_Хранилище {
  public partial class uc_Пользователи : UserControl, I_Плитка {
    Guid pk_Guid;
    ObservableCollection<row_Entity> oc_Entity=new ObservableCollection<row_Entity>();  //-- Показываем в DataGrid 
    List<row_Entity> lst_Entity; //-- Временное хранение выборки
    row_Entity xrow, yrow;
    SqlDataReader reader;
    SqlParameter[] asp;
  . . .
  public class row_Entity {. . .};
  . . . 
  public uc_Пользователи(MainWindow omw, Object oUC) {
    InitializeComponent();
  . . .
    lst_Entity = null;  lst_Entity = new List<row_Entity>();
    //-- Готовим параметры запроса
    asp = new SqlParameter[3];
    asp[0] = new SqlParameter("@pk_Entity", pk_Guid);

    string xstr = tbx_Псевдоним.Text.Trim();
    if (xstr != "") xstr += "%";
    asp[1] = new SqlParameter("@str_Псевдоним", xstr) ;

    xstr = tbx_ФИО.Text.Trim();
    if (xstr != "") xstr += "%";
    asp[2] = new SqlParameter("@str_ФИО", xstr);

    при.tmrStart(); try { await wsp.Entity_SP("au_Пользователи_Sel", wsp.sp_Sel, asp, RowToEntity); }
    catch (System.InvalidOperationException ex) {. . . 
    catch (Exception ex) {. . .
    . . .
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39676260
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,

и что Вы показали? Это то же приложение, но работающее вдруг с SQL Server? Нет.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39676263
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,

уберите
Код: c#
1.
using Devart.Data.Oracle;


уберите
Код: c#
1.
using System.Data.SqlClient;


будет интерфейс работать? нет... прибит гвоздями

а гибкость - это кода уровню представления не важно то, из какого хранилища прилетают данные
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39676289
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAа гибкость - это кода уровню представления не важно то, из какого хранилища прилетают данные

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

Естественно, судя по приведённым кускам кода, об этом даже нельзя и мечтать.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39676571
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAа гибкость - это кода уровню представления не важно то, из какого хранилища прилетают данные

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

Естественно, судя по приведённым кускам кода, об этом даже нельзя и мечтать.В двухзвенке это решается средствами СУБД - profiler, triggers и т. п.

Мне тоже не нравятся показанные примеры кода. Но они решают поставленную задачу, никакие требования не нарушены, значит претензий быть не может.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39676572
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAесли да, то смотрите в сторону денормализации... летать будет всё со страшной силойНо и проблем с обеспечением целостности данных добавится...
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39676576
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КВ двухзвенке смена БД обычно приводит к переписыванию всей прикладной логики. Поэтому о смене БД речи не идёт.
С чего бы это? Делается отдельный класс для взаимодействия с бд, суть которого - исключительно чтение/запись данных, и никакой прикладной логики внутри. Из класса экстрактится интерфейс, класс по этому интерфейсу инжектится в классы, реализующие прикладную логику. При необходимости смены БД пишется новый класс для новой БД с тем же интерфейсом, инжектится вместо старого. Всё это прекрасно работает на двухзвенке. Ну, разумеется, если программа написана так, что данные из БД сразу пихаются в гуй, и в нем же и обрабатываются, то тогда да, уже мало что поможет.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39676579
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныАлексей КВ двухзвенке смена БД обычно приводит к переписыванию всей прикладной логики. Поэтому о смене БД речи не идёт.
С чего бы это? Делается отдельный класс для взаимодействия с бд, суть которого - исключительно чтение/запись данных, и никакой прикладной логики внутри. Из класса экстрактится интерфейс, класс по этому интерфейсу инжектится в классы, реализующие прикладную логику. При необходимости смены БД пишется новый класс для новой БД с тем же интерфейсом, инжектится вместо старого. Всё это прекрасно работает на двухзвенке. Ну, разумеется, если программа написана так, что данные из БД сразу пихаются в гуй, и в нем же и обрабатываются, то тогда да, уже мало что поможет.Да, обращение к БД в коде клиента лучше вынести в репозитарий, кто ж спорит. Но прикладную логику разумно располагать на сервере. В двухзвенке для этого используются средства СУБД - stored proc, view и т. п. А в этом случае хоть как ты организуй код на клиенте, серверную часть при смене СУБД придётся переделывать.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39676582
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КВ двухзвенке для этого используются средства СУБД - stored proc, view и т. п. А в этом случае хоть как ты организуй код на клиенте, серверную часть при смене СУБД придётся переделывать.
А такое и в трехзвенке бывает, когда критичные к быстродействию куски прикладной логики выносятся в БД.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39676624
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныАлексей КВ двухзвенке для этого используются средства СУБД - stored proc, view и т. п. А в этом случае хоть как ты организуй код на клиенте, серверную часть при смене СУБД придётся переделывать.
А такое и в трехзвенке бывает, когда критичные к быстродействию куски прикладной логики выносятся в БД.Да, но сейчас речь не об этом.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39676693
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КВ двухзвенке смена БД обычно приводит к переписыванию всей прикладной логики. Поэтому о смене БД речи не идёт.

Двухзвенка это прошлый век.

Алексей КВ двухзвенке это решается средствами СУБД - profiler, triggers и т. п.

Т.е. костыли и приплясывания с бубном. Да и пофигу, прошлый век и совершенно не интересно.

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

Ещё неизвестно решают ли. Или так хочет думать автор.
Некоторые лечатся уринотерапией и искренне верят, что помогает.
Тогда вроде как можно сказать тоже самое, что сказал ты.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39676711
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КВ двухзвенке смена БД обычно приводит к переписыванию всей прикладной логики. Поэтому о смене БД речи не идёт.

Двухзвенка это прошлый век.И что? Предлагаешь все существующие проекты переписать на трёхзвенку?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39676716
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt Ещё неизвестно решают ли. Или так хочет думать автор.
Некоторые лечатся уринотерапией и искренне верят, что помогает.
Тогда вроде как можно сказать тоже самое, что сказал ты.Тебе нужны копии актов сдачи проекта в промышленную эксплуатацию?
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39676732
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КИ что? Предлагаешь все существующие проекты переписать на трёхзвенку?

Если это возможно, проект активно развивается и ему ещё грозит многолетняя поддержка. Да.
А для новых проектов всё очевидно.

Алексей КТебе нужны копии актов сдачи проекта в промышленную эксплуатацию?

Слушай, если бы я не видел столько говна в своей жизни, прошедшего все ПМИ и введённые в промышленную эксплуатацию, не видел сколько потеряно на этом денег в итоге, сколько нервных клеток программистов угроблено, которым пришлось это говно сопровождать, я бы так категорично и экспрессивно об этом не говорил.

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

Хотите жить в говне, живите. Без меня. Ну и топлю за то, чтобы молодые умы не поддавались на подобные десткрутивные, глупые и наивные утверждения, типа "главное, чтобы работало".

Есть такое понятие, как качество. Российский автопром тоже выпускает продукты, которые "работают же", но что-то не особо много желающих ЭТО покупать и НА ЭТОМ ездить.

Поэтому не надо задвигать про акты сдачи.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39676736
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подобный менталитет это просто бич российской разработки и вообще любой деятельности.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39676785
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Сон Веры Павловны, сегодня, 06:23 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21586952][21586952]
>...Делается отдельный класс для взаимодействия с бд… пишется новый класс для новой БД...
Отдельный класс - это уже проходил.
Вы считаете, что данная конструкция удобна - покажите на примере программного кода, как Вы реализуете доступ к данным посредством обращения к ХП (хотя бы на примере двух ХП(выборок))

>что данные из БД сразу пихаются в гуй,
Инфосистема, что мы поддерживаем, интерактивна. Информация непосредственно отображается в основном либо на карте, либо в гриде в гуевых потоках. Информация нужна именно здесь.
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39676793
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не надоело вам?
Локальная сеть: web-браузер или десктоп
ВМоисеев (с)
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39677061
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAесли да, то смотрите в сторону денормализации... летать будет всё со страшной силойНо и проблем с обеспечением целостности данных добавится...
Если руки прямые, то не добавится
...
Рейтинг: 0 / 0
Исключения vs коды возвратов
    #39680036
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>skyANA, 19 июл 18, 15:29 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1297921&msg=21585446][21585446]

>уберите… уберите… будет интерфейс работать? нет... прибит гвоздями
Вы не правы. Убрал, пока полёт нормальный.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
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.
//using Devart.Data.Oracle;
using System;
using System.Collections.Generic;
. . .
namespace ns_ГИС {
  public partial class uc_ИнспекцииВД : UserControl, I_Плитка {
    public byte nMax = 20;
    public row_Entity xrow, yrow;

    long pk_Long;
    ObservableCollection<row_Entity> oc_Entity = new ObservableCollection<row_Entity>();  //-- Показываем в DataGrid 
    List<row_Entity> lst_Entity; //-- Временное хранение выборки
    //OracleParameter[] asp;
. . .
      //-- Готовим параметр запроса
      //asp = new OracleParameter[4]{null, new OracleParameter("x_nazvanie", xstr),
      //  new OracleParameter("x_dt_begin", (DateTime)dpr_Начало.SelectedDate), new OracleParameter("x_dt_end", (DateTime)dpr_Конец.SelectedDate)
      //};
      Object[][] psp = new object[3][];
      psp[0] = new object[2] { "x_nazvanie", xstr };
      psp[1] = new object[2] { "x_dt_begin", (DateTime)dpr_Начало.SelectedDate };
      psp[2] = new object[2] { "x_dt_end", (DateTime)dpr_Конец.SelectedDate };
      при.tmrStart(); await Task.Run(() => wsp.Entity_SP("NCUYAO_GIS.VD_Inspek_Sel", wsp.sp_Sel, psp, RowToEntity)); при.tmrStop();
. . .
===============================================
using Devart.Data.Oracle;
using System;
using System.Data;

namespace ns_ГИС {
  public delegate void dlg_sp(dlg_RowToEntity RowToEntity);
  public delegate void dlg_RowToEntity(IDataRecord reader);
. . .
    //-- Выполнение хранимой процедуры
    public static void Entity_SP(string spname, dlg_sp sp, object[][] psp, dlg_RowToEntity RowToEntity) {
      nRow = 0;  //-- Число строк в выборке
      reader = null; wspErr = null;
      int n = (psp==null)? 0: psp.Length;
      OracleParameter[] asp = new OracleParameter[n+1];
      asp[0]= new OracleParameter("cur_viborka", OracleDbType.Cursor, ParameterDirection.Output);
      try {
        for (int i=0;i<n;i++) {
          switch (psp[i].Length) {
            case 2: asp[i+1] = new OracleParameter((string)psp[i][0], psp[i][1]); break;
            case 3: asp[i+1] = new OracleParameter((string)psp[i][0], OracleDbType.Raw, (int)psp[i][1], psp[i][2], ParameterDirection.Input); break;
          }
        }
        using (OracleConnection connection = new OracleConnection(гп.str_Соединение)) {
          connection.Open();
          OracleCommand command = new OracleCommand("", connection);
          command.Parameters.Clear();
          command.Parameters.AddRange(asp);
          command.CommandText = spname;
          command.CommandType = CommandType.StoredProcedure;

          //-- Формируем коллекцию из выборки
          using (reader = (OracleDataReader)command.ExecuteReader()) { sp(RowToEntity); }
        }
      }
      catch (Exception ex){ wspErr = ex.Message; }
    }
. . .  
...
Рейтинг: 0 / 0
406 сообщений из 406, показаны все 17 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Исключения vs коды возвратов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]