@Fsharp_chat

Страница 192 из 772
Aminion
04.06.2017
16:26:48
Ну допустим есть некое количество функций которые обрабатывают данные, которые берутся из бд, и результат кладется в бд, в шарпе это были бы классы, где в конструктор приходят все нужные репозитории и вспомогательные сервисы, и все бы это распихивалось рефлексией контейнером, а в фп как?

Vasily
04.06.2017
16:27:35
А в фп в параметры функции приходит функция

Pawel
04.06.2017
16:27:42
@Aminion программа на F# - это как правило обычное для продцедурных языков иерархическое дерево модулей с вершиной main, хотя можно и так как ты привык

Evgeniy
04.06.2017
16:28:40
@fvnever https://github.com/gsomix/avalonia-fsharp-netcore-showcase

Google
Pawel
04.06.2017
16:30:01
В F# ты мог бы сделать нижний модуль для интеропа с БД, выше - потокобезопасный твердотельный кэш БД, далее выше - апи доменной модели. Как вариант

Igor
04.06.2017
16:31:21
Ну допустим есть некое количество функций которые обрабатывают данные, которые берутся из бд, и результат кладется в бд, в шарпе это были бы классы, где в конструктор приходят все нужные репозитории и вспомогательные сервисы, и все бы это распихивалось рефлексией контейнером, а в фп как?
Имхо Есть pure функции которые обрабатывают данные. На вход функциям приходит все необходимые данные для работы. Инфраструктурный код уже не важен, можешь хотя напрямую вызывать все, ведь бизнес логики лежит отделитель (в pure функциях и может быть легко протестирована).

Evgeniy
04.06.2017
16:32:18
@angmarr А у тебя же MacOS? Если будет свободная минутка, поможешь протестировать проект, который я чуть выше кинул?

Igor
04.06.2017
16:32:55
Ок, попробую после

Evgeniy
04.06.2017
16:33:06
@angmarr Спасибо!

Aminion
04.06.2017
16:47:44
Хм, и функция обработки не должна вызывать функции репозитория, а только генерировать данные , которые покладет вышестоящая функция в базу?

Vasily
04.06.2017
16:48:28
По идее да

По факту должен получиться пайплайн, где сайд эффекты только в функции работы с репозиторием

В реальности,естественно, есть еще логирование

Aminion
04.06.2017
17:02:24
Если с аутпутом понятно, с инпутом не совсем, если я не функцию репозитория передаю, а уже данные, как быть с тем случаем, когда сама бизнесс логика решает, какие данные нужно получить, то есть нужны юзера, но при некоторых обстоятельствах ещё и продукты?

Igor
04.06.2017
17:04:12
Имхо, домен (логика) это набор if/match (и ТД) + конвертирование данных. Сайд эффектам тут нет место. Самое сложное в том чтобы разнести логику и инфраструктуру, а не как раньше в C# "все смешал в одном методе и обмазали DI"

Aleksander
04.06.2017
17:06:55
Ну в c# никто не запрещает бизнес логику реализовывать отдельно и без сайд эффектов. Собственно для этого там и требуется куча классов

Google
Aminion
04.06.2017
17:10:11
Все сразу? Это же дикий оверхед по обращению к бд, а если делать лениво, это и будет уже депенданси, а не данные

Aminion
04.06.2017
17:11:30
Везёт вам, вы в продакшене фп используете?

*f#

Igor
04.06.2017
17:23:39
Лично я android разработчик ?, по этому пока для себя. На работе kotlin, но я считаю что f# все равно луче. И даже на работе, я пишу в f# ФП стиле.

Klei
04.06.2017
17:43:41
Везёт вам, вы в продакшене фп используете?
Мне кажется, что надо на сайте завести страницу с кратким списком участников сообщества с описанием опыта на F#, местом работы, если оно связано с практическим использованием, местом обитания (авось встречу собрата в своем городе) и т.п. Ибо этот вопрос стабильно задается раз в неделю и на него уже лень отвечать. // Разумеется на добровольной основе.

Igor
04.06.2017
17:50:45
Но на аватарке все равно стоит логотип хаскеля.
Двигаю ФП в мобаил, там с этим ох как запущено. Есть мысли что, после признания гуглом котлин, это будет развиваться (ведь в нем есть кейс классы, функции и ТД)

Nikolay
04.06.2017
17:51:26
У меня идея :)

Pawel
04.06.2017
17:51:32
Больше всего на выбор парадигмы программиррования влияет - внезапно - фреймворк и библиотеки. Если EF или SQLProvider, которые не предоставляют иммутабельного апи, то какой смысл делать "бизнесс логику" иммутабельной? Как лучше реализовать "бизнес логику" и прочие условные слои приложения - с сайд эффектами или без - зависит от задачи. Делать "бизнес логику" кровь из носа иммутабельной можно разве что из религиозных побуждений. Технически зачастую проще, надёжнее и эффективнее сделать на массивах, изменяемых переменных и мьютексах.

Nikolay
04.06.2017
17:51:34
Сделать DSL для авалонии

м?

Pawel
04.06.2017
17:51:54
а вот "инфраструктуру" всё таки лучше сделать иммутабельной .поскольку для неё (как правило) меньше требований по перформансу, чем к "бизнесс логике"

Evgeniy
04.06.2017
17:52:18
@Dolfik А что ты хочешь видеть в этом DSL?

Nikolay
04.06.2017
17:53:24
http://macoscope.com/blog/kotlin-anko-layouts/

Igor
04.06.2017
17:54:25
@Dolfik А что ты хочешь видеть в этом DSL?
Видимо иерархию вью описывать, вместо xaml и тп (Анко для этого)

Google
Evgeniy
04.06.2017
17:55:12
А мне нравится xaml. :C

Nikolay
04.06.2017
17:56:31
grid { rowDefintions { rowDefintion 100 rowDefintion auto rowDefintion 100 } button { content "Click me" width 100 height 20 padding 5 click (fun x -> ...) } }

Типа такого, м?

Igor
04.06.2017
17:56:39
Да
Ох не знаю, после DSL Fable для реакта... (может быть я ещё не привык)

Nikolay
04.06.2017
17:57:03
Вроде красиво и читабельно

Заодно фшарп популярнее сделаем :)

Летучая
04.06.2017
17:58:41
А мне нравится xaml. :C
Ну такоэ, хтмл помощнее будет

в жсоне как-то сложно на глаз воспринимается имхо

Nikolay
04.06.2017
17:59:46
Летучая
04.06.2017
18:00:12
а, этож даже чистый F#

Nikolay
04.06.2017
18:00:16
Это похоже на жсон, но ещё проще

Летучая
04.06.2017
18:00:49
круто!

Nikolay
04.06.2017
18:02:25
Ну что думаете по этому поводу?)

Evgeniy
04.06.2017
18:05:06
Я очень ок с текущим способом описания интерфейса.

Igor
04.06.2017
18:05:17
(Забыл синтаксис билдеров ?) Мне кажется надо пруф-оф-концепт сделать обязательно ? Что нибудь простое, для начала.

Ivan
04.06.2017
18:05:18
grid { rowDefintions { rowDefintion 100 rowDefintion auto rowDefintion 100 } button { content "Click me" width 100 height 20 padding 5 click (fun x -> ...) } }
Так врядли. Скобки нужны квадратные. Тогда похоже: let grid (builders : List<grid -> grid>) =

Google
Nikolay
04.06.2017
18:05:51
И ещё сюда хорошо зайдут единицы измерения :)

Evgeniy
04.06.2017
18:06:05
@Dolfik Но если тебе интересно, то можно попробовать кое-что посерьезнее. Например, реализовать Elm Architecture для Avalonia. http://anthonylloyd.github.io/blog/2016/06/20/fsharp-elm-part1 http://anthonylloyd.github.io/blog/2016/07/01/fsharp-elm-part2

Evgeniy
04.06.2017
18:07:43
@Dolfik А ты уже читал эти статьи?

Nikolay
04.06.2017
18:08:16
Может чутка освобожусь, попробую prof of concept сделать

Pawel
04.06.2017
18:19:10
xaml страшнее атомной войны кстати, не понимаю что в нём может нравиться

уж насколько омерзителен html+css, но это имхо в разы лучше xaml

Nikolay
04.06.2017
18:23:35
Проблема будет в добавлении сторонних библиотек

Pawel
04.06.2017
18:25:18
grid { rowDefintions { rowDefintion 100 rowDefintion auto rowDefintion 100 } button { content "Click me" width 100 height 20 padding 5 click (fun x -> ...) } }
вот это оч гут, 100% мотивация для изучения котлина. На F# к сожалению так ни в жисть не сделаешь для продакшена, поскольку лямбду нельзя прикрутить в качестве type extension, да ещё и реализующего внешний интерфейс

Nikolay
04.06.2017
18:25:52
А почему нельзя? Там насколько я помню обычный аргумент передаётся, и можно в качестве аргумента указать что угодно

Pawel
04.06.2017
18:29:06
это ты написал котлин код с использованием Anko. " там насколько я помню обычный аргумент передаётся" - нет, там всё на много сложнее))

Nikolay
04.06.2017
18:30:51
Ну ок: click { ... }

Можно кстати попробовать сделать через тайп провайдер. Это вообще возможно?

Igor
04.06.2017
19:10:24
@fvnever https://github.com/gsomix/avalonia-fsharp-netcore-showcase
А как запускать то? При dotnet run выдает: Hello World from F#! [|"MainWindow+MainWindow.xaml"; "Application+App.xaml"; "FSharpSignatureData.avalonia-fsharp-netcore-showcase"; "FSharpOptimizationData.avalonia-fsharp-netcore-showcase"|] Unhandled Exception: Avalonia.Gtk3.Interop.NativeException: dlsym(RTLD_DEFAULT, gtk_window_set_decorated): symbol not found at Avalonia.Gtk3.Interop.UnixLoader.GetProcAddress(IntPtr dll, String proc, Boolean optional) at Avalonia.Gtk3.Interop.Resolver.Resolve(String basePath) at Avalonia.Gtk3.Gtk3Platform.Initialize() at Avalonia.Controls.AppBuilderBase`1.Setup() at Avalonia.Controls.AppBuilderBase`1.Start[TMainWindow](Func`1 dataContextProvider) at Application.main(String[] argv) in /Users/igor/Documents/31/avalonia-fsharp-netcore-showcase/Application.fs:line 22

Evgeniy
04.06.2017
19:12:39
@angmarr Спасибо. Буду разбираться сейчас.

Google
Evgeniy
04.06.2017
19:13:38
> You need gtk+3 from brew to be installed on your Mac. Native Cocoa-based backend is currently under development and will be available in June.

Окей. Пока не очень удобно.

@angmarr Еще раз спасибо за тест.

Igor
04.06.2017
19:31:58
> You need gtk+3 from brew to be installed on your Mac. Native Cocoa-based backend is currently under development and will be available in June.
Поставил gtk через brew - запустилось. https://i.gyazo.com/bac6c3b423f54e6f47c47b071a437509.png

Evgeniy
04.06.2017
19:32:35
Отлично. :)

Pawel
04.06.2017
19:33:30
о, супер! авлония кросплатформенная благодаря gtk оказывется. не хватало ещё возиться с корявыми заброшенными биндингами кондовых линупсовых либ

Evgeniy
04.06.2017
19:34:05
@ruzzke_mir Свое мнение об Avalonia ты можешь высказать в @CSharpChat лично @nikita_tsukanov.

Nikolay
04.06.2017
19:35:30
Как завести авалонию без xaml? :)

Evgeniy
04.06.2017
19:43:04
@angmarr Осталось дождаться Cocoa backend и можно будет настоящие self-contained приложения для OSX собирать.

И все на F#, конечно же. :)

Igor
04.06.2017
19:48:53
@angmarr Осталось дождаться Cocoa backend и можно будет настоящие self-contained приложения для OSX собирать.
Я даже не знаю… Есть же репозиторий (9k ⭐️) для ReactNative под macOS, на котором можно тоже писать в F# Fable https://github.com/ptmt/react-native-macos

Evgeniy
04.06.2017
19:50:16
Я не настаиваю.

Nikolay
04.06.2017
19:50:46
Пока как-то так получилось: window { minHeight 100.0 minWidth 100.0 content ( textBlock { text "Hello, world!" }) show } |> ignore

Nikolay
04.06.2017
19:51:47
Работает? Скриншот покажешь?
Работает. Но я пока пытаюсь запустить авалонию без xaml и дефолтного окна

Чёт пока не выходит

Roman
04.06.2017
20:14:40
@fvnever https://github.com/gsomix/avalonia-fsharp-netcore-showcase
@sergey_tihon такое может попасть в f# weekly?

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