@proGO

Страница 1056 из 1674
Bohdan
16.12.2017
22:10:51
ну и контроллер напиши универсальный какой то работающий над подобным сервисом

Alexander
16.12.2017
22:59:05
гонишься за переиспользованием кода? Хорошее начинание. Используй только отдельные сущности, типа, сервисов
сервисы для переиспользования кода на go... первый раз слышу... мб я не понял концепции предложенного

Alexander
16.12.2017
23:00:25
ну неприятные вещи с оопшностью)
не я просто не понял как это на переиспользование кода влияет)

Google
Alexander
16.12.2017
23:01:04
всм пакет можно написать и применять везде... а сервис это же вроде уже готовый продукт...

или тут про паттерн?

Bohdan
16.12.2017
23:01:29
не я просто не понял как это на переиспользование кода влияет)
я сервисы эти строил вокруг орм с дженериками и di, правда, на другом языке

или тут про паттерн?
а хер знает просто сущность вводил дополнительную все функции по работе с БД велись через наследуемый абстрактный сервис, который работал с репозитарием с дженериком модели

ну и контроллер работал над этим сервисом

Андрей
16.12.2017
23:06:13
Вопросик, а go in action у кого-то есть перевод?

или Go in Practice

Alexander
16.12.2017
23:08:03
я для себя летом фреймворк написал на go, хотел что типа symfony (php) на go + чтобы было еще и на gin похоже... все еще пилю потихоньку... если есть желание у кого-то поковырять и покритиковать (документации почти нет, еще не начинал... но кто с gin работал - поймет) Хотелось бы именно по коду получить рекомендации https://github.com/itrabbit/just

за опечатки в тексте и комментах - сорян)))

Bohdan
16.12.2017
23:10:42
понял о чем речь
а, еще добавлю в наследник контроллера инжектим сервис над нужной моделью в наследник сервиса с нужной моделью инжектив репозитарий над орм моделью

Google
Bohdan
16.12.2017
23:11:27
ну и над всей этой хренью можно споконо написать автогенератор рест апи согласно модели

Nick
16.12.2017
23:13:45
вот обьясните мне, зачем вообще юзать гоу, если везде вы пишите автогенераторы?

Alexander
16.12.2017
23:16:22
вот обьясните мне, зачем вообще юзать гоу, если везде вы пишите автогенераторы?
для rest это на го трудно сделать нормально и качественно, а если брать кодогенерацию, то она можно сказать перекрывает отсутствие дженериков... правда тоже с умом надо ко всему подходить

Alexander
16.12.2017
23:17:14
тогда почему бы не взять подходящий язык?
если есть задача автогенерации - возможно)))

тогда почему бы не взять подходящий язык?
лично мне разработка на go приносит удовольствие))))

Nick
16.12.2017
23:18:56
Alexander
16.12.2017
23:20:14
садомазо тож любишь?)
нет, на go нет садомазо))) все локанично и просто на пределе возможностей языка))) да и по скорости работы и потреблению ресурсов вполне устраивает...

Alexander
16.12.2017
23:23:25
насчело локаничности можно поспорить
ну это мое мнение... да и дело привычки)))

Nick
16.12.2017
23:24:05
asm тоже простой, да и скорость работы хорошая))) только вот лаконичности нет

примерно такой ж довод)

Alexander
16.12.2017
23:24:22
asm не простой)))

синтаксис да

Nick
16.12.2017
23:24:37
как язык простой

Alexander
16.12.2017
23:24:37
но не все остальное

написать на асме веб микросервис за вечер из коробки нереально

Roman
17.12.2017
00:48:10
web service на ASM? шта?!

Леша
17.12.2017
02:36:11
+

Google
Anatoliy
17.12.2017
07:50:05
гонишься за переиспользованием кода? Хорошее начинание. Используй только отдельные сущности, типа, сервисов
хм... а я ниже почитал - и о чем речь не понял, я же и хочу получается в одном хендлере сделать логику, а в следующем отправку, но не могу понять как передать данные из одного в другой... просто потому что мне надо в первом делать return если я словил ошибку, а в этом случае второй уже не сработает... вот и ломаю голову

Anatoliy
17.12.2017
08:26:38
Дык, а зачем такое разделение делать то?
потому что видимо я что-то не понимаю. вот смотри, у меня Rest, я получаю POST запрос на создание пользователя, при попытке его пихнуть в базу получаю ошибку что такой логин уже есть, т.е. произошла ошибка, мне надо свернуть дальнейшие действия и выдать эту ошибку клиенту. как это сделать правильно? я это вижу как return nil, errors, 500 если же все успешно создано - то return result, nil, 200

но так не выйдет т..к. к следующему хендлеру дойдет очередь толкьо если ретурнов не будет, т.е. мне надо просто дергать метод, но методу для отправки ответа нужен контекст, причем - всегда. но каждый раз добавлять что-то вроде Write(ctx, ...) желания нет, хотя то что придется писать что-то вроде Write(res, errors, port) return я уже смирился( но чем-то этот вариант мне не нравится. может я реально где-то затупил?

Anatoliy
17.12.2017
08:32:08
Так это бизнес логика, зачем ее отдельно куда то пихать
Т.е. каждый раз писать что-то типа такого это нормально?: func (h *TokenHandler) CreateUser(c *macaron.Context, errs binding.Errors, user model.User) { var lastInsertId int var createdAt time.Time err := h.DBConn.QueryRow("INSERT INTO auth.users(username, password, email) VALUES($1, $2, $3) RETURNING user_id, created_at", user.Username, user.Password, user.Email).Scan(&lastInsertId, &createdAt) if err != nil { errs.Add([]string{}, "users", "Не удалось создать нового пользователя") //.. тут еще ошибки // вот типа такого?? result := Result{ Result: nil, Errors: errs, } c.JSON(500, result) return } user.UserID = lastInsertId user.CreatedAt = createdAt res := map[string]interface{}{ "user": user, } Write(c, res, nil, 200) return //c.JSON(200, res) }

Bohdan
17.12.2017
08:33:37
Так то да. Только это приведет к дублированию кода, если понадобится еще где то этот код

Леша
17.12.2017
08:37:23
я не особо вник, но если нужно что-то в любом случае отправлять, почему не использовать defer?

Anatoliy
17.12.2017
08:37:38
Так то да. Только это приведет к дублированию кода, если понадобится еще где то этот код
вот оно и приводит, а я не могу понять как правильно это дублирование убрать. в идеале я хочу просто делать return res, err, port и всё

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

Bohdan
17.12.2017
08:41:13
вот оно и приводит, а я не могу понять как правильно это дублирование убрать. в идеале я хочу просто делать return res, err, port и всё
Выноси в отдельную сущность, которая существует вне зависимости от контроллеров) в контроллерах отвечай на запросы, валидируй входящие данные, а в сервисах просто сама бизнес логика над базой данных. Сервис возвращает или ошибки или результат, а контроллер уже как то от этого отвечает и будет тебе счастье)

Anatoliy
17.12.2017
08:41:37
так именно это я хочу сделать, не понимаю как

Anatoliy
17.12.2017
08:42:30
как из контроллера передать данные в эту отдельную сущность которая их будет отправлять

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

Bohdan
17.12.2017
08:46:11
Давай смотреть через призму построения рест апи. Есть сущность /users. Над ним есть CRUD операции. Создание, чтение, обновление и удаление. Чтение двух видов может быть. /users и /users/:user_id Вот и строй сервис и контроллер согласно такого соглашения

Игорь
17.12.2017
08:46:40
А ничё? Просто хочу узнать мнение.

Alexander
17.12.2017
08:48:12
Прошу прощения, как сообщество гоферов относится к утверждениям о том что мол Rust быстрее Go?
Если честно, не интересовался углубленно... но в реальной жизни и задачах они на одном уровне.... а синтетика - полная хрень

Google
Ilia
17.12.2017
08:48:37
Накой мне Раст без сообщества, без кучи либ, с ломающейся совместимостью и без успешных примеров в продакшене?

Bohdan
17.12.2017
08:49:47
Get /users?offset=&limit= Get /users/:user_id Post /users Put /users/:user_id Delete /users/:user_id К примеру, от такого рест апи оттолкнись

Ilia
17.12.2017
08:50:08
Вечно растровые тролли в Go чатиках ищут чё поесть)

Alexander
17.12.2017
08:50:26
Anatoliy
17.12.2017
08:50:39
Get /users?offset=&limit= Get /users/:user_id Post /users Put /users/:user_id Delete /users/:user_id К примеру, от такого рест апи оттолкнись
есть такое, но когда я данные пихнул в базу, или получил ошибку при попытке что-то сделать - как к следующему шагу(уведомлению пользователя об этом) перейти?

Alexander
17.12.2017
08:51:30
почему
перебор проще

Леша
17.12.2017
08:52:19
перебор проще
перебор по чему конкретно будет быстрее?

Admin
ERROR: S client not available

Леша
17.12.2017
08:52:26
а, все

понял

Bohdan
17.12.2017
08:53:16
есть такое, но когда я данные пихнул в базу, или получил ошибку при попытке что-то сделать - как к следующему шагу(уведомлению пользователя об этом) перейти?
С сервиса в контроллер возвращай (err, result) Если ерр не нил — обработать ошибки. Если неизвестная ошибка — верни с контроллера 500 ошибку

Anatoliy
17.12.2017
08:54:20
С сервиса в контроллер возвращай (err, result) Если ерр не нил — обработать ошибки. Если неизвестная ошибка — верни с контроллера 500 ошибку
хм... я кажется понял, ты хочешь что бы я разложил хендлер на части и уже в нем делал обработку пришла ошибка или нет?

Anatoliy
17.12.2017
08:55:34
на фреймворке - macaron

Bohdan
17.12.2017
08:56:41
хм... я кажется понял, ты хочешь что бы я разложил хендлер на части и уже в нем делал обработку пришла ошибка или нет?
Хэндлер запроса один) и это одна из функций круд. Перед ним может быть какие то мидлвеа Этот хэндлер в большинстве своем лишь вызывает метод сервиса и формирует ответ на хттп запрос в зависимости от того что сервис вернет А вся бизнес логика скрыта от контроллера

Anatoliy
17.12.2017
09:00:50
Google
Anatoliy
17.12.2017
09:14:39
Не, неправильно совершенно логику в контроллерах держать)
я слышал толкьо про логику в контроллерах и в моделях, или есть еще третий вариант?

Bohdan
17.12.2017
09:17:48
я слышал толкьо про логику в контроллерах и в моделях, или есть еще третий вариант?
толстая модель, ты имеешь в виду? я хз, так не строил системы

Anatoliy
17.12.2017
09:18:03
а в каком месте тогда логика? те самые сервисы?

Bohdan
17.12.2017
09:18:06
но не в контроллер бы я точно пихал бизнес логику)))

Anatoliy
17.12.2017
09:20:02
да, сервисы
т.е. проект выглядит как-то так?: /src/ - db - model - controller - service main.go ?

Bohdan
17.12.2017
09:21:35
примерно еще utils могут быть я бы db в папку models засунул ну а там всякие дополнительные структуры можно засунуть в папку structs в папке models

Alexander
17.12.2017
09:24:02
но не в контроллер бы я точно пихал бизнес логику)))
а если контроллеры часть сервиса? Просто от фреймворков много чего зависит...

Bohdan
17.12.2017
09:25:18
а если контроллеры часть сервиса? Просто от фреймворков много чего зависит...
неправильно теряется переиспользуемость контроллер - это хрень что работает с http сервис - это хрень что отвечает за бизнес логику такое себе разделение ответственности)

не зависит, кстати, от фрейма

Anatoliy
17.12.2017
09:26:14
в общем подобный подход позволяет быстро и просто перейти от REST к чему другому например как я понял

Alexander
17.12.2017
09:26:53
переиспользование контроллера? скиньте мне паттерн который это описывает)

Alexander
17.12.2017
09:27:12
просто стало интересно)

Anatoliy
17.12.2017
09:27:34
переиспользуемость именно кода для логики имелась в виду судя повсему

Anatoliy
17.12.2017
09:28:05
т.е. ты если нужно можешь использовать один и тот же код как для API, так и для фронтенда например, отдавая в одном случае данные на сайте, а в другом через json

по крайне мере как я понимаю это дело

Anatoliy
17.12.2017
09:29:50
про фронт не догнал... вы хотите html выдавать, а иногда json?
я - не хочу, но если использовать сервисы, выходит что переключать варианты выдачи данных становится просто

Страница 1056 из 1674