powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Исключения vs коды возвратов
25 сообщений из 406, страница 5 из 17
Исключения 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
25 сообщений из 406, страница 5 из 17
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Исключения vs коды возвратов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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