@dlangru

Страница 179 из 719
Denis
29.05.2017
09:15:08
Это всё бы за один запрос получить и уже работать - оно так и быстрее работает, и транзакционность соблюдена будет

Dmitry
29.05.2017
09:15:43
да, но тут софтина в локалку будет смотреть, я где надо prepered statment заюзал, в остальных местах он там мало нужен

Denis
29.05.2017
09:16:08
ИТ системы растут - сегодня не надо, завтра надо

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

Google
Dmitry
29.05.2017
09:16:43
мне больше по архитектуре интересует... в плане адекватности класса работы с БД и процессинга

Denis
29.05.2017
09:16:43
а то получшь странную неконсистентность иногда

типа машина уже удалена а трэк ещё есть, или наоборот

Архитектура... я бы сделал класс с методами, соответствующими запросам.

специальный, назвал бы DBRequests

и его бы отовсюду дёргал

Dmitry
29.05.2017
09:17:59
к примеру на сколько адекватно в конструкторе class MyStat создавать экземпляр: MyTracks mytracks;

Denis
29.05.2017
09:18:33
Так глубоко ещё не смотрел

Dmitry
29.05.2017
09:34:11
М... а какой логгер лучше использовать? Просто сейчас при импотрте вайба вылез конфликт имен и я не совсем понимаю стоит ли фобосовский или вайбовский юзать...

Denis
29.05.2017
09:37:25
Я бы выбрал стандартный если нет особых требований.

К коду в vibe есть вопросы. Фигачат "на скорость"

Dmitry
29.05.2017
09:38:40
import vibe.vibe; можно как-то указать, чтобы оно импортировало все кроме модуля логгера, чтобы конфликта имен не было?

Andrey
29.05.2017
09:40:20
не в тему D, глаз резануло - в stats.d где select (select count(*) ..., select count(*)) лучше уж `select sum(case when road_dist < 5 then 1 else 0 end) lt5, sum(case when road_dist < 10 ... )

Google
Denis
29.05.2017
09:40:47
Там просится один хороший запрос (через PREPARED желательно)

Andrey
29.05.2017
09:40:58
ну я так глубоко не копал)

Dmitry
29.05.2017
09:41:35
предлагаешь просто их по частям импортировать?

Denis
29.05.2017
09:41:41
Канешн

https://github.com/denizzzka/vibe.d.db.postgresql/blob/master/dub.sdl

вот пример

Dmitry
29.05.2017
12:04:00
преподположим есть функция: Json foo(int x) { } и мы забыли в урле передать этот самый x. В итоге в браузер вайб отдаст ошибку. Праивльно ли я понимаю, что единственный выход блок try-catch использовать или можно как-то без него обойтись? Что мол не все аргументы были переданы

Denis
29.05.2017
12:05:57
непонятен вопрос. это про какой-то RPC речь?

Dmitry
29.05.2017
12:07:31
про rest

Denis
29.05.2017
12:09:28
Скорее всего, единственный. Он же и идеологически верный.

Dmitry
29.05.2017
12:14:14
тогда я не пойму в каком месте обертывать. Json foo(int x) { } внутри то уже поздно — функция аргумент ожидает, а снаружи try { Json foo(int x) { } } оно как-то странно смотрится... нигде такого не видел

Denis
29.05.2017
12:14:45
именно так

Dmitry
29.05.2017
12:15:48
@deviator что скажешь? Ты вроде с вайбом плотно работал...

Oleg
29.05.2017
12:17:40
эт где я такое сказал?

я на нём что-то пробовал давно давно

Dmitry
29.05.2017
12:18:17
Ну во всяком случае ты лучше меня его думаю знаешь)

Oleg
29.05.2017
12:18:26
но теперь стараюсь максимально избегать, но не выходит

внутри то уже поздно — функция аргумент ожидает, а снаружи try { Json foo(int x) { } } оно как-то странно смотрится... нигде такого

Google
Oleg
29.05.2017
12:19:40
это вообще не валидная конструкция, если мы говорим о методе не вложенном

внутри класса так сделать нельзя точно

и это не относится к vibe

как сделать такой момент, который ты хочешь я не знаю

но явно не так

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

типа при возникновении ошибки вызывать какую-то функцию и она уже будет возвращать клиенту то, что ты запишешь в ней

и да, аргументы по умолчанию не работают в этом случае?

Dmitry
29.05.2017
12:24:38
scope(failure) myerrorHandler() ?

как-то так?

м... щас попробую аргументы по умолчанию

Oleg
29.05.2017
12:24:59
нет

Oleg
29.05.2017
12:25:17
это должны быть какие-то vibe атрибуты

Maxim
29.05.2017
12:25:39
а в каком месте вообще вайб ошибку отдаст?)

Oleg
29.05.2017
12:25:54
типа @errorHandler(&myHandler) Json foo(int x) { ... }

Maxim
29.05.2017
12:26:03
какой-то же параметр должен передаться в функцию)

Oleg
29.05.2017
12:26:45
в урле же можно и без параметров вызвать функцию

не?

Maxim
29.05.2017
12:27:47
ну, скажем, ничего ты не передаешь в url, но в функцию-то передать все равно что-то надо, нельзя же скомпилировать вызов функции без параметра, если она требует параметр

я в вайбе не силен, но по логике, рантайм ошибка должна возникать где-то в глубине вайба, а не в момент вызова функции, не?)

Google
Dmitry
29.05.2017
12:29:07
кажется нашел что-то похожее... http://vibed.org/api/vibe.web.web/errorDisplay втыкаю

Oleg
29.05.2017
12:31:56
он может вызывать функцию только если распарсил аргумент из урла, но если его нет эксепшн бросит

Maxim
29.05.2017
12:33:04
а у вайба внутренности не nothrow сейчас?

опасно кидать эксепшены внутри кода, который должен персистентно висеть в памяти)

Dmitry
29.05.2017
12:35:10
Правильно ли я понимаю: void getForm(string _error = null) { //render!("form.dt", _error); } @errorDisplay!getForm void postForm(string name) { if (name.length == 0) throw new Exception("Name must not be empty"); redirect("/"); } если в postForm прилетело что-то пустое, то кидаем ошибку и передаем ее в getForm ?

Oleg
29.05.2017
12:38:01
ну типа того

Dmitry
29.05.2017
12:51:08
а как параметры сделать опциональными? дефолтное значение-дефотным значением, но как понимаю можно как-то опциональные еще



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

Admin
ERROR: S client not available

Denis
29.05.2017
13:38:51
Сгенерить body надо наверно

И отдать

Dmitry
29.05.2017
13:39:07
т.е. в консоль что-то написать не получится?

Denis
29.05.2017
13:39:41
Какую?

Ты пишешь браузер?

Dmitry
29.05.2017
13:39:56
ну вон я в foo пытаюсь ошибку вывести

в консоль

Denis
29.05.2017
13:40:42
В pgator есть обработка ошибок - глянь там

Он именно в консоль шлёт их

Google
Dmitry
29.05.2017
14:10:37
@ahdenchik в коде pgtor нет упоминаний @errorDisplay!

Denis
29.05.2017
14:10:50
Значит оно нинадо

ща гляну

https://github.com/DSoftOut/pgator/blob/7119458fe2907a2de4bdb209897743cd035e470b/source/test/vibe_rest.d#L27 Ты так делаешь запрос в REST с помощью Vibe?

Dmitry
29.05.2017
14:13:15
да

Denis
29.05.2017
14:13:28
ну вот оно или сработает или кинет эксепшен

https://github.com/DSoftOut/pgator/blob/7119458fe2907a2de4bdb209897743cd035e470b/source/test/vibe_rest.d#L42

Вот вызов метода, который гарантированно падает при запросе (он на стороне сервера не реализован)

просто эксепшен какой-то падает и всё (я видимо даже не стал вникать какой)

(это тест, тут можно)

Dmitry
29.05.2017
14:45:03
я правильно понимаю, что нельзя сделать один параметр обязательным, а остальные опциональными. Нужно все делать или такими или сякими. Простоу меня компилятор ругается при попытках часть так, часть сяк сделать

Denis
29.05.2017
14:46:32
Можно

Ты про параметры с дефолтными значениями?

или про функции с переменным числом параметров?

Dmitry
29.05.2017
14:47:03
да типа: int trackid=0

про дефолтные

Denis
29.05.2017
14:47:18
Параметры со значениями по умолчанию обязательно должны быть в конце списка

иначе компилятор не понимает какой параметр куда (вдруг у них типы совпадают?)

Dmitry
29.05.2017
14:48:40
а в интерфейсе и в реализации объявление этих параметров должно быть 1к1 или можно что допустим в интерфейсе объявить их со значениями по дефолту, а в реализации метода без дефотного значения

Oleg
29.05.2017
19:41:50
10 строчек кода

кстати, кому интересно насчёт проблемы с выводом стектрейса в vibe, то нужно просто setLogLevel(LogLevel.debug_) вызвать

там предусмотрен вывод стектрейса https://github.com/rejectedsoftware/vibe.d/blob/master/core/vibe/core/core.d#L1445

Страница 179 из 719