И столкнулся с проблемой. Буду очень благодарен за помощь в поиске решения.
Задача:
1) Получить из БД строки
2) Сгруппировать их по полю EventType, которое предварительно необходимо очистить от лишних пробелов
3) Обновить поле status в БД для каждой полученой строки
Вносить изменения в функцию на сервере БД я не могу.
У меня есть тип events
type events struct {
events map[string]*event
}
И для него есть такой метод. Имя постарался дать максимально отражающее то, что я хочу от этой функции:
Код на playground (запустить нельзя, но с компа читать удобнее): https://play.golang.org/p/T6apMlrULJs
func (e *events) getEventsFromSQLGroupedByEventType()(groupedEvents map[string][]*event){
// 1) Получаем строки
rows, dbQueryErr := db.Query("...")
if dbQueryErr != nil {
return
}
defer rows.Close()
for rows.Next() {
event := new(event)
rowsScanErr := rows.Scan(
&event.Id,
&event.EventType,
)
if rowsScanErr != nil {
fmt.Println(rowsScanErr)
return
}
// 2) Очищаем поле EventType от лишних пробелов
eventType := strings.TrimSpace(event.EventType.String)
// 2) Группируем строки по полю EventType
groupedEvents[eventType] = append(groupedEvents[eventType], event)
// 3) фиксация данных в БД для этой строки
...
}
return
}
Первый вопрос: является ли побочным эффектом то, что я очищаю поля eventType от лишних пробелов? Или можно не придавать этому значение и не указывать это ни в названии функции, ни выносить в какой-то отдельный логичный метод?
У меня пока есть только один вариант решения:
По принципу single responsibility я разбить все это на три функции и поместить их как методы для типа events
1) events.getEventsFromSQL()
2) events.groupEventsByEventType()
3) events.updateEventsStatusInDB()
По принципу open–closed я должен и метод groupEventsByEventType превратить в:
events.groupEventsBy("EventType")Но это влечет за собой кучу логики, которая пока не нужна. И следуя принципу YAGNI я это игнорирую.
Дальше для удобства можно создать некий метод init где буду вызывать их по очереди.
func (e *events) init(){
e.events = events.getEventsFromSQL()
events.groupEventsByEventType()
events.updateEventsStatusInDB()
}
Но тут проблема в том, что в каждой из этих функций я должен пройтись по всем элементам мапы events. И мне кажется это излишним.
ппц полотно
Постарался компактно уложить все свои мысли, что бы проще было понять вопрос. Но вы правы, вышло все равно полотно D:
Для вас Го первый язык?
Второй, первый javascript
эт не язык :D
почитайте стива макконела - совершенный код
Я понимаю что это не ответ на вопрос, но может вам с джавы начать?
Ну, эту тему можно долго обсуждать) В целом мой вопрос даже не к языку относится, а к организации кода
ну типа JAVAscript пройден, осталось JAVA изучить
Я сейчас Чистый Код Роберта Мартина читаю
а потом изучить то на чем написана жава
Если вы эти язык рядом ставите, то точно с джавы.
я их ставлю рядом?
а потом изучить то на чем написано то на чем написана жава?
Отложите Чистый код и не заморачивайтесь. Вернётесь к этой книге через несколько лет когда наберетесь опыта. Все вопросы отпадут
судя по тому что я тоже так считаю, пришло то время когда пора уже советовать не порядок изучения технологий, а советовать порядок прочтения книг
google.com:80 http://google.com http://www.google.com https://google.com https://www.google.com
А сейчас то что делать?)
Обсуждают сегодня