
Dmitry
07.02.2018
15:52:44
да
ну и haskell considered harmul
потому что мы все близки к тому, что бы вместо решения задач бизнеса свалиться в пропасть circular jerking

Александр
07.02.2018
15:53:25
haskellers considered harmful

Google

Dmitry
07.02.2018
15:53:40
по краю ходим, я бы сказал

Denis
07.02.2018
15:53:55

Александр
07.02.2018
15:54:14

Dmitry
07.02.2018
15:54:36
это не на языке бизнеса сказано

Mikhail
07.02.2018
15:54:52

Александр
07.02.2018
15:55:29
Вот о чем бы я десять раз подумал, - так это "поднимать ли бизнес-логику в типы, когда можно сделать Free-DSL". И выбор здесь явно не в пользу типов

Dmitry
07.02.2018
15:56:23
ну я повторю вопрос - мы видим типы для инвойсов в гисте

Denis
07.02.2018
15:56:33
Все что вы с фри делаете в своих дсл прекрасно делается без фри.

Dmitry
07.02.2018
15:56:58
можно пример применения этих типов с пояснениями (где тут зависимость от контекста и пресловутые IoC и DI)
еще раз спрошу - на самом деле меня вот этот вот IoC вызывает легкую тошноту

Denis
07.02.2018
15:57:12
Это. Способ. Получить. Инстанс. Монады.

Dmitry
07.02.2018
15:57:24
да чего б его не написать то?
теперь про IoC

Google

Dmitry
07.02.2018
15:57:40
тьюринг-полные конфиги - это IoC ?
строенный в программу скриптинг - это IoC ?

Denis
07.02.2018
15:57:54

Александр
07.02.2018
15:58:31

Alexander
07.02.2018
15:58:48
@qnikst завтра с Мальты вернётся - спросите ещё раз

Александр
07.02.2018
15:59:01

Alexander
07.02.2018
15:59:06
а то тут с wifi не всегда хорошо и совещаний много

Dmitry
07.02.2018
15:59:13
@qnikst гражданство покупаешь, поди?

Alexander
07.02.2018
15:59:18
хаха

Dmitry
07.02.2018
16:00:25
давайте еще раз. допустим, я совсем тупой.

Alexander
07.02.2018
16:00:31
не, собрание компании

Dmitry
07.02.2018
16:00:39
встроенный в программу на си скриптинг на самодельном лиспе - это IoC ?

Александр
07.02.2018
16:00:49

Denis
07.02.2018
16:01:09

Mikhail
07.02.2018
16:02:53
прямо на превьюхе этот слайд

Александр
07.02.2018
16:03:34
Не надо думать, что SOLID - это про ООП

Dmitry
07.02.2018
16:03:45
OO considered nothing

Александр
07.02.2018
16:04:02
Не важно, что там пишут и говорят. Принципы - универсальные

Google

Denis
07.02.2018
16:04:16
мне вот тоже не важно что пишут
и говорят

Александр
07.02.2018
16:04:33
И?

Denis
07.02.2018
16:04:50

Dmitry
07.02.2018
16:04:56
кто-то ответит - "внедрение языка скриптования в программу на си это пример IoC или нет" ?

Denis
07.02.2018
16:05:24
без понятия
я в буллшит бинго этом не разбираюсь

Dmitry
07.02.2018
16:05:47
потому что любая статья про IoC - это примерно два экрана словоблудия и в качестве примера - огромный xml-ный конфиг, который меняет поведение жабьей программы

Александр
07.02.2018
16:05:51

Denis
07.02.2018
16:05:59

Dmitry
07.02.2018
16:06:24
да, а какую имплементацию возвращать решает xml-ный конфиг и абстрактная фабрика

Александр
07.02.2018
16:06:26
На самом деле, все ФП - имеет в своей природе естественный IoC. Ведь мы передаем функции в качестве зависимостей

Dmitry
07.02.2018
16:06:32
я умею в булшит бинго

Александр
07.02.2018
16:08:51
Так и что там насчет SOLID? В чем тут ООП? Есть понятие ООП-интерфейса (в Java даже ключевое слово имеется) и есть понятие интерфейса как абстракции. Не надо их путать. Поэтому в SOLID "I" применима к любой парадигме. Впрочем, как и Single Responsibility, и Open-Close, и LSP, и все остальное. Просто в интернетах подавляющее большинство авторов дальше ООП не заглядывали, и для них все эти принципы ничего другого не значат.

Dmitry
07.02.2018
16:08:57
вернемся теперь к нашим инвойсам
вот у нас есть инвойс, там есть всякое бла-бла и позиции
нам для инвойса , допустим, надо
1) посчитать total
2) сгенерировать pdf
это примеры разной обработки одной структуры данных в завимости от ?

Google

Dmitry
07.02.2018
16:11:06
просто немного напрягает, что в любом упоминании IoC он выступает как самостоятельная ценность. а не те задачи, которые он решает

Denis
07.02.2018
16:11:27

Александр
07.02.2018
16:12:07
Сгенерировать pdf - это метод для Invoice DSL. У меня такой даже есть, обращается к сервису.
Посчитать total - это сценарий, так как ему требуются данные по инвойсам, которые он может получить, дергая методы DSL. Общее правила для DSL такие:
- Методы должны делать только то, что нельзя выразить через другие методы;
- Методы должны быть настолько абстрактными, насколько возможно;
- Методы должны компоноваться настолько, насколько возможно
По сути, это все относится к любому интерфейсу
Хоть REST, хоть ООП, хоть еще какому
Да, хаскеллистам не помешает посмотреть на практики дизайна корпоративных приложений. Haskell - не более особенный, чем другие языки. К нему тоже это все применимо.
И вот как раз этих практик нам не хватает.

Dmitry
07.02.2018
16:15:22
дело в том, что часть этих практик растёт от отсутствия примитивов, которые доступны в ФЯ и типов
часть - просто следствие дизайна этих языков

Александр
07.02.2018
16:15:42
Часть - да. Паттерны те же. Но есть универсальные

Dmitry
07.02.2018
16:15:47
что-то, причем, есть вполне возможно ценное
вопрос, что

Александр
07.02.2018
16:16:17
Разделение интерфейса и реализации.

Dmitry
07.02.2018
16:16:26
делается, хотя методы спорны

Александр
07.02.2018
16:16:35
Для маленьких приложений это несущественно, а большие быстро превращаются в тыкву

Dmitry
07.02.2018
16:16:42
спорно

Александр
07.02.2018
16:16:48
Single Responsibiltiy

Dmitry
07.02.2018
16:17:02
нормально, особенно тут хорошо тайпклассы заходят

Александр
07.02.2018
16:17:10
low coupling, high cohesion

Google

Dmitry
07.02.2018
16:17:13
ну, большие приложения в тыкву превращаются без модульности
а модульность может достигаться разными способами

Александр
07.02.2018
16:18:08
Модульность - это важно. Но этого недостаточно для приложения, общающегося с внешним миром.

kana
07.02.2018
16:18:38
Сгенерировать pdf - это метод для Invoice DSL. У меня такой даже есть, обращается к сервису.
Посчитать total - это сценарий, так как ему требуются данные по инвойсам, которые он может получить, дергая методы DSL. Общее правила для DSL такие:
- Методы должны делать только то, что нельзя выразить через другие методы;
- Методы должны быть настолько абстрактными, насколько возможно;
- Методы должны компоноваться настолько, насколько возможно
про тотал: если его делать сценарием, то нужно в dsl делать ряд геттеров, а есть такое мнение, что геттеры и сетеры - ересь, поэтому total может уехать в api

Александр
07.02.2018
16:18:43
В clojure есть прекрасный принцип, примерно такой:
- First, program with data
- Second, program with functions
То есть, если можно - программируем данными
Если нет - функциями

Dmitry
07.02.2018
16:19:20
@kana_sama а еще есть мнение, что если этот инвойс - просто ADT, то всё это достигается без применения клеточек из буллшит бинго, а просто обходом этого ADT

Denis
07.02.2018
16:19:29
правда в кложе это превращается в жонглирование хешмапами

Александр
07.02.2018
16:19:49
Нету никаких геттеров в смысле ООП

Dmitry
07.02.2018
16:20:14
сеттеры. геттеры

Александр
07.02.2018
16:20:21

Dmitry
07.02.2018
16:20:28
я точно всё еще в чате про хаскель?

kana
07.02.2018
16:20:46
ну окей, пусть total считается с неким коэфицентом, который зависит от интерпретатора

Александр
07.02.2018
16:20:48
Нету никаких геттеров и сеттеров.
Но в Haskell как таковом они есть в виде линз

kana
07.02.2018
16:21:10
в total у нас будет геттинг этого коэфицента из api

Dmitry
07.02.2018
16:21:11
линзы это просто сахар

Александр
07.02.2018
16:21:20

Dmitry
07.02.2018
16:21:58
окей. но неважно, есть он или нет
наличие линз или их отсутствие ничего не изменит.