
Friedrich
31.05.2017
05:23:23
Не самая плохая идея.

Evgeniy
31.05.2017
05:28:40
Да, обычный dependency inversion.

Nikolay
31.05.2017
06:29:56

Friedrich
31.05.2017
06:30:17
Это для примера?

Google

Friedrich
31.05.2017
06:30:27
Меня просто удивили такие, гм, невзрачные названия
Если это пример то ок.

Nikolay
31.05.2017
06:30:45
Это тестовый бот :)
Чтобы проверять корректность работы функций

Pawel
31.05.2017
06:38:42
Поясните за инверсию контроля в фп, я так понимаю, так же просто, как в ООП, разруливать зависимости не возможно?
1) "Инверсия контроля" - не праильный термин, за который тебя накажут на любом собеседовании. Правильный - dependency injection (внедрение зависимостей).
2) То, что расказывает лектор в видео по ссылке @gsomix, ни чего общего с реальными практиками DI не имеет от слова вообще. Для ФП DI - параллельная всселенная
3) Dependency injection может неплохо выглядеть в теории. Но на практике она бесполезна и обычно ведет к усложнению кода. Могу популярно объяснить почему так

Vasily
31.05.2017
06:39:52
Есть еще dependency inversion

Evgeniy
31.05.2017
06:39:58
@ruzzke_mir Я никаких видео не кидал.

Летучая
31.05.2017
06:40:20
>Могу популярно объяснить почему так
Давай, очень интересно.

Vasily
31.05.2017
06:40:28
Хотя про di у меня есть пара историй из реальной жизни

Pawel
31.05.2017
06:40:48

Evgeniy
31.05.2017
06:41:21
@ruzzke_mir А dependency inversion -- это прямо из SOLID.
Ну, и калька на русском -- инверсия зависимостей.

Vasily
31.05.2017
06:41:58
@ruzzke_mir ServiceLocator is the cornerstone of any enterprise application :)

Google

Evgeniy
31.05.2017
06:43:01
Наверное, инверсия контроля откуда-то оттуда.

Vasily
31.05.2017
06:43:01
В общем,коллеги,DI-действительно дорога в ад

Igor
31.05.2017
06:43:24

Vasily
31.05.2017
06:43:36
IoC -из Solid
@angmarr все хотят, чтобы их считали умными :)
А если по делу, то идея с рекордами функций интересная

Pawel
31.05.2017
06:46:50

Vasily
31.05.2017
06:51:28
Симан,кстати , недавно относительно каялся по поводу ServiceLocator
Года три назад вроде

Pawel
31.05.2017
06:52:57

Vasily
31.05.2017
06:54:06
Мне не хватает стикера с кэпом

Evgeniy
31.05.2017
07:37:54
Привет!

Roman
31.05.2017
07:38:12
Добре!

Roman
31.05.2017
08:01:43

Pawel
31.05.2017
08:11:50
— Зачем заводить кучу бесполезных интерфейсов ради DI, если за большинством таких интерфейсов на практике редко бывает более одной реализации?
— Как узнать, когда, в каком порядке и с какими аргументами были инициализированы зависимости, использующиеся в конкретной области кода? Как это влияет на debuggability и maintainability кода?
— Как повлиять на порядок инициализации зависимостей и аргументы, используемые при их инициализации?
— Как сделать так, чтобы определенные зависимости создавались при каждом вызове функции, а другие — использовались повторно?
— Какие проблемы решает DI? Стоит ли решение этих проблем добавления геморроя по вышеуказанным вопросам?


Roman
31.05.2017
08:17:40
— Зачем заводить кучу бесполезных интерфейсов ради DI, если за большинством таких интерфейсов на практике редко бывает более одной реализации?
— Как узнать, когда, в каком порядке и с какими аргументами были инициализированы зависимости, использующиеся в конкретной области кода? Как это влияет на debuggability и maintainability кода?
— Как повлиять на порядок инициализации зависимостей и аргументы, используемые при их инициализации?
— Как сделать так, чтобы определенные зависимости создавались при каждом вызове функции, а другие — использовались повторно?
— Какие проблемы решает DI? Стоит ли решение этих проблем добавления геморроя по вышеуказанным вопросам?
Полностью согласен, и поэтому DI фреймворки это зло, к понятию DI это всё не имеет отношения. DI это просто передача зависимости на один уже созданный сервис другому. Можно передать ссылку на объект, не обязательно создавать интерфейс. Можно создавать объекты самому. Всё остальное от лукавого.


Astmatik
31.05.2017
08:20:45

Ilya
31.05.2017
08:25:07
— Зачем заводить кучу бесполезных интерфейсов ради DI, если за большинством таких интерфейсов на практике редко бывает более одной реализации?
Чтобы взяли на работу

Pawel
31.05.2017
08:25:30

Google

Ilya
31.05.2017
08:26:29
сидишь обмазанный сервисами, заобстрагировался интерфейсами с одним методом и единственной релизацией и ищешь работу

Nikolay
31.05.2017
08:27:23
Короче я так и не понял из вашего обусждения, DI это плохо, или хорошо?
или DI с интерфейсами - плохо, а DI без интерфейсов - хорошо?

Ilya
31.05.2017
08:28:03
DI хорошо не везде
и не всегда

Vasily
31.05.2017
08:28:13
В меру, я бы сказал

Ilya
31.05.2017
08:28:18
ну это мой поинт

Vasily
31.05.2017
08:28:23
Не стоит его в абсолют возводить

Roman
31.05.2017
08:30:45
Короче я так и не понял из вашего обусждения, DI это плохо, или хорошо?
DI это процесс передачи зависимости и имплементирован он может быть по разному. Например использовать DI фреймворк какой-нибудь, чего по моему мнению делать не надо, т.к. куча геморроя от него. Можно руками всё делать, через конструктор или аргумент функции, что хорошо, т.к. всё под контролем.

Pawel
31.05.2017
08:32:59
== DI это просто передача зависимости на один уже созданный сервис другому. Можно передать ссылку на объект, не обязательно создавать интерфейс.
так это не DI. Это тривиальное действие в коде, не требующее для себя определения. Что-то вроде вызозова функции с аргументами :) DI - это именно про интерфейсы, декораторы и различные ОПП-паттерны.
ИМХО всем надо прочитать хотя бы одну книжку по ООП какого нибудь дядюшки боба. Что-бы не путаться в терминологии и при случае по издеваться над упоровшимися оопшниками :)

Roman
31.05.2017
08:34:12
Книжки дядюшки боба тоже зло

Pawel
31.05.2017
08:35:57
Я просто тупо беру понятие DI из Фаулера. Он тоже чёткого определения не даёт, но смысл приводит на 50...100 листах. Сосбственно понятие не техническое ни разу, поэтому и нормального определения нет

Roman
31.05.2017
08:38:22
Всё остальное наворотили теоретики от ООП
Service Locator кстати нарушает этот принцип

Astmatik
31.05.2017
08:41:00
Приведите пример из реальной жизни, где без использования dependency injection не обойтись.

Roman
31.05.2017
08:41:56

Astmatik
31.05.2017
08:42:19
А то куда ни плюнь, везде hello world enterprise edition.

Evgeniy
31.05.2017
08:46:14
Ребята, извините, но SOLID и DI это не про ООП.

Pawel
31.05.2017
08:46:16

Google

Anton
31.05.2017
08:46:18
Народ, а через MySQL Type Provider же можно создавать таблицы и заполнять их данными?

Evgeniy
31.05.2017
08:47:59
Если вы хотите обсуждать это в контексте ООП, в том виде, например, какое встречается в C# или Java, то лучше найти более подходящий чат.
Слишком много флуда от этой темы.

Roman
31.05.2017
08:48:29
Об этом хорошо за пивом болтать ))

Anton
31.05.2017
08:49:25
У меня цель:
Создать 2 таблицы в MySQL.
Users, Files.
С такой связью: один юзер - много файлов (один-ко-многим)
Хочу сделать это через F#
такое реально?

Doge
31.05.2017
08:53:04

Pawel
31.05.2017
08:54:43

Evgeniy
31.05.2017
08:57:16
@ruzzke_mir Это приведет лишь к дополнительному флуду. Я уже кидал статью polytypic про SOLID, например.

Friedrich
31.05.2017
08:59:06
Ну то есть ты хочешь выполнить DDL из F#? Или смоделировать вот эту свою предметную область?

Anton
31.05.2017
08:59:22
@fvnever TypeProvider

Friedrich
31.05.2017
08:59:38
Для MySQL были какие-то тайппровайдеры, но я сам с ними не работал. Надо искать :)

Anton
31.05.2017
08:59:47
ну на EF через C# я бы создал энтити и выполнил дб апдейт

Friedrich
31.05.2017
08:59:57
Кажись, SqlProvider умеет, а SqlCommandProvider не умеет.

Anton
31.05.2017
09:00:03
вопрос - как на F# это сделать?

Roman
31.05.2017
09:00:07

Friedrich
31.05.2017
09:00:25
Верно, на F# обычно делают наоборот.

Google

Anton
31.05.2017
09:00:27
@nevoroman а, я значит не совсем правильно понимаю как работает провайдер
точнее - для чего он нужен.
Я думал sqlProvider это замена EF в F#

Friedrich
31.05.2017
09:00:59
У тебя source of truth — это твоя база данных. Ты вручную (или миграционными скриптами) формируешь БД, а потом через провайдеры формируешь типы для доступа к этой БД.

Roman
31.05.2017
09:02:45
Провайдер нужен для упрощения доступа к данным. EF для формирования базы удобен в том контексте, что ты сначала создаешь модели, а потом по ним создается БД (Model First оно же). А SQL Provider работает как Database First - то есть в бэкграунде создает вот эти самые модели по таблицам в базе. Соответственно, логично сначала спроектировать-создать базу, а потом работать с данными в ней через провайдер.

Anton
31.05.2017
09:03:32
Ага... Теперь понятно. Но тоесть после создания базы ручками, я смогу вставлять туда данные через провайдер, так ?

Roman
31.05.2017
09:04:05
Ага

Anton
31.05.2017
09:05:33
@nevoroman и вот этим мне нужно для этого пользоваться, так ?
https://fsprojects.github.io/SQLProvider/core/mysql.html

Roman
31.05.2017
09:06:09
Да, это оно

Anton
31.05.2017
09:12:32
Так, базу создал. Нужно попробовать этот тайп провайдер.
@nevoroman вопрос наверное очень детский... Но где найти все эти методы для добавления, удаления и остальных CRUD у тайп провайдера ?

Roman
31.05.2017
09:13:43

Vasily
31.05.2017
09:13:45
https://fsprojects.github.io/SQLProvider/core/crud.html
Опередил

Anton
31.05.2017
09:14:05
спасибо

Roman
31.05.2017
09:14:24
Там документация общая для обращения к любым SQL базам - отличается только dbVendor

Anton
31.05.2017
09:17:11
Спасибо больше. И ещё вопрос - а из нугета ставить пакет вот этот?

Friedrich
31.05.2017
09:17:58
Это же не тот

Roman
31.05.2017
09:18:10
Вот этот
https://www.nuget.org/packages/SQLProvider

Friedrich
31.05.2017
09:18:11
Тебе надо SqlProvider, а то SqlClient.