@Fsharp_chat

Страница 180 из 772
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
@ruzzke_mir Я никаких видео не кидал.
ошибся прошу прощения. Видео от @Igor

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-действительно дорога в ад

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
Симан,кстати , недавно относительно каялся по поводу ServiceLocator
Самое лучшее - это вообще забить на подобные понятия и не принимать их в расчёт на практике.

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
Самое лучшее - это вообще забить на подобные понятия и не принимать их в расчёт на практике.
Dependency injection это нормально, все ими везде пользуются (передача ссылки на сервис в конструкторе или в аргументе метода). А вот всякие заумные DI фреймворки, делающие magic, это зло.

Pawel
31.05.2017
08:11:50
Dependency injection это нормально, все ими везде пользуются (передача ссылки на сервис в конструкторе или в аргументе метода). А вот всякие заумные DI фреймворки, делающие magic, это зло.
DI контейнер может гораздо лучше управлять сложностью, вложенной в процесс преобразования абстракций к конкретным типам, и управлять их жизненными циклами. С ним проще делать механизмы перехвата и декораторы. Но если ты считаешь, что DI - это хорошо, ответь для себя (здесь не надо) на такие вопросы:

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

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

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

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
Я просто тупо беру понятие DI из Фаулера. Он тоже чёткого определения не даёт, но смысл приводит на 50...100 листах. Сосбственно понятие не техническое ни разу, поэтому и нормального определения нет
In software engineering, dependency injection is a technique whereby one object supplies the dependencies of another object. A dependency is an object that can be used (a service). An injection is the passing of a dependency to a dependent object (a client) that would use it. The service is made part of the client's state.[1] Passing the service to the client, rather than allowing a client to build or find the service, is the fundamental requirement of the pattern.

Всё остальное наворотили теоретики от ООП

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
In software engineering, dependency injection is a technique whereby one object supplies the dependencies of another object. A dependency is an object that can be used (a service). An injection is the passing of a dependency to a dependent object (a client) that would use it. The service is made part of the client's state.[1] Passing the service to the client, rather than allowing a client to build or find the service, is the fundamental requirement of the pattern.
это устарело :) В другой книге он описывает DI как обстракный набор принципов и шаблонов проектирования программного обеспечения, которые дают возможность разрабатывать слабосвязанный код (естественно я своими словами) В любом случае это определение абсолютно бесполезно. Под поняте "one object supplies the dependencies of another object." можно подветси практически всё что угодно. Реальное DI в кроваваом ынтерпрайзе - это именно то, о чём я выше говорил

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

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

Слишком много флуда от этой темы.

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

Хочу сделать это через F#

такое реально?

Doge
31.05.2017
08:53:04
Приведите пример из реальной жизни, где без использования dependency injection не обойтись.
DI фреймворки скорее просто облегчают интеграцию с другими фреймворками. Например, ты хочешь чтобы какая-нибудь зависимость создавалась по одному разу на каждый http запрос к asp.net mvc. Можешь тогда воспользоваться каким-нибудь autofac с поддержкой asp.net mvc и получить нужное поведение одной строчкой в кофигурации контейнера.

Pawel
31.05.2017
08:54:43
Если вы хотите обсуждать это в контексте ООП, в том виде, например, какое встречается в C# или Java, то лучше найти более подходящий чат.
ну так ты бы привёл пример что-ли SOLID и DI в ФП или написал соими словами как ты себе это представляешь.

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
У меня цель: Создать 2 таблицы в MySQL. Users, Files. С такой связью: один юзер - много файлов (один-ко-многим)
А зачем создавать таблицы через провайдер? :) Через провайдер удобно получать-добавлять записи

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 у тайп провайдера ?

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.

Страница 180 из 772