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


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