Size: a a a

Programming Offtop

2020 August 14

СГ

Сергей Греков... in Programming Offtop
Денис
Ну в плане если мне нужно на двух разных экранах добавить книгу в избранное это должны быть разные эффекты "добавь в избранное" или один?
Дальше уже простор для творчества, если тебе удобнее один сделать, делай один. Здесь только нужно внимательно смотреть чтобы в этих переиспользуемых штуках много логики не появлялось
источник

Д

Денис in Programming Offtop
Igor
Опять склеиваешь логику и эффект:
- эффект это "сохранить" (изменение мира)
- логика: "книга в избранное"

Для тупейших crud не знаю зачем делать разные эффекты
Не понял, как в этим примере будет выглядеть структура эффекта?
источник

Д

Денис in Programming Offtop
Тип save(book)?
источник

Д

Денис in Programming Offtop
В плане эффект абстрактный, т.е. в него можно любые данные передать?
источник

DE

Denis Egorov in Programming Offtop
Денис
Не понял, как в этим примере будет выглядеть структура эффекта?
class SaveEffect(db: Database, tableName: String, cv: ContentValues) {
      fun invoke() = db.insert(tableName, null, cv)
}
источник

DE

Denis Egorov in Programming Offtop
например, так
источник

DE

Denis Egorov in Programming Offtop
но здесь очень много вариаций на самом деле
источник

DE

Denis Egorov in Programming Offtop
а в коде просто будет SaveEffect(db, “books”, cv).invoke()
источник

DE

Denis Egorov in Programming Offtop
можно просто сделать функцией это
источник

AD

Aleksey D. in Programming Offtop
Denis Egorov
class SaveEffect(db: Database, tableName: String, cv: ContentValues) {
      fun invoke() = db.insert(tableName, null, cv)
}
это ж надо как-то из стейта передать базу в эффект
что-то здесь не сходится 🤔
источник

DE

Denis Egorov in Programming Offtop
можно сделать sealed class из всех side effects в приложении
источник

DE

Denis Egorov in Programming Offtop
очень много вариаций
источник

I

Igor in Programming Offtop
Denis Egorov
class SaveEffect(db: Database, tableName: String, cv: ContentValues) {
      fun invoke() = db.insert(tableName, null, cv)
}
Не плохо, только вместо готовых ContentValues можно передать интерфейс конвертер в дополнение к исходному объекту
источник

I

Igor in Programming Offtop
Как-то так

saveSomething :: Collection -> Encoder 'a -> Key -> 'a -> Cmd Unit


Collection - id коллекции объектов (как в mongo)
Key - id объкта можешь строкой сделать
'a - твой объект любого типа
Encoder 'a - функция которая конвертит твой объект в формат пригодный для сериализации

let saveBookToFavorite (book : Book) : Cmd Unit =
   saveSomething "favorite" BookEncoder book.id book


Можно еще DI замутить через каррированием

let saveBookToFavorite (x : Book) : Cmd Unit = 
saveSomething "favorite" BookEncoder x.id x
источник

I

Igor in Programming Offtop
А если в языке есть тайп-классы/имплиситы, то еще проще становится
источник

КР

Кирилл Романенко... in Programming Offtop
Блин, чёт ностальжи напала
Игорь и Денис рассуждают о реализациях эффектов в TEA/MVU/MVI, такое уже было приблизительно год назад
источник

Д

Денис in Programming Offtop
Igor
Как-то так

saveSomething :: Collection -> Encoder 'a -> Key -> 'a -> Cmd Unit


Collection - id коллекции объектов (как в mongo)
Key - id объкта можешь строкой сделать
'a - твой объект любого типа
Encoder 'a - функция которая конвертит твой объект в формат пригодный для сериализации

let saveBookToFavorite (book : Book) : Cmd Unit =
   saveSomething "favorite" BookEncoder book.id book


Можно еще DI замутить через каррированием

let saveBookToFavorite (x : Book) : Cmd Unit = 
saveSomething "favorite" BookEncoder x.id x
Ну здесь получается эффект конкретную логику имеет, не понимаю где нужно разделять эффект и логику
источник

AD

Aleksey D. in Programming Offtop
Кирилл Романенко
Блин, чёт ностальжи напала
Игорь и Денис рассуждают о реализациях эффектов в TEA/MVU/MVI, такое уже было приблизительно год назад
но в роли Дениса был Кирилл?
источник

КР

Кирилл Романенко... in Programming Offtop
Aleksey D.
но в роли Дениса был Кирилл?
Нет, тогда ещё Игорь сделал пул-реквест в mvico Дениса.)
источник

I

Igor in Programming Offtop
Денис
Ну здесь получается эффект конкретную логику имеет, не понимаю где нужно разделять эффект и логику
Эффект это saveSomething, где там логика? Там только реализация shared-prefs и sqlite, который любые данные может сохранять по key-value семантике
источник